当前位置:网站首页>XML学习 Day1 : xml / Jsoup解析器 / selector选择器 /Xpath选择器
XML学习 Day1 : xml / Jsoup解析器 / selector选择器 /Xpath选择器
2022-07-27 16:09:00 【Z知行T】
XML
1.1 XML概述
## XML:
1. 概念:Extensible Markup Language 可扩展标记语言
* 可扩展:标签都是自定义的。 <user> <student>
* 功能
* 存储数据
1. 配置文件
2. 在网络中传输
* xml与html的区别
1. xml标签都是自定义的,html标签是预定义。
2. xml的语法严格,html语法松散
3. xml是存储数据的,html是展示数据
* w3c:万维网联盟
1.2 XML语法
语法:
* 基本语法:
1. xml文档的后缀名 .xml
2. xml第一行必须定义为文档声明
3. xml文档中有且仅有一个根标签
4. 属性值必须使用引号(单双都可)引起来
5. 标签必须正确关闭
6. xml标签名称区分大小写
* 快速入门:
<?xml version='1.0' ?>
<users>
<user id='1'>
<name>zhangsan</name>
<age>23</age>
<gender>male</gender>
<br/>
</user>
<user id='2'>
<name>lisi</name>
<age>24</age>
<gender>female</gender>
</user>
</users>
* 组成部分:
1. 文档声明
1. 格式:<?xml 属性列表 ?>
2. 属性列表:
* version:版本号,必须的属性
* encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
* standalone:是否独立
* 取值:
* yes:不依赖其他文件
* no:依赖其他文件
2. 指令(了解):结合css的
* <?xml-stylesheet type="text/css" href="a.css" ?>
3. 标签:标签名称自定义的
* 规则:
* 名称可以包含字母、数字以及其他的字符
* 名称不能以数字或者标点符号开始
* 名称不能以字母 xml(或者 XML、Xml 等等)开始
* 名称不能包含空格
4. 属性:
id属性值唯一
5. 文本:
* CDATA区:在该区域中的数据会被原样展示
* 格式: <![CDATA[ 数据 ]]>
1.3 xml约束
* 约束:规定xml文档的书写规则
* 作为框架的使用者(程序员):
1. 能够在xml中引入约束文档
2. 能够简单的读懂约束文档
* 分类:
1. DTD:一种简单的约束技术
2. Schema:一种复杂的约束技术
* DTD:
* 引入dtd文档到xml文档中
* 内部dtd:将约束规则定义在xml文档中
* 外部dtd:将约束的规则定义在外部的dtd文件中
* 本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
* 网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
* Schema:
* 引入:
1.填写xml文档的根元素
2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.引入xsd文件命名空间. xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.itcast.cn/xml"
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itcast.cn/xml"
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd">
二、Jsoup解析器
在获取student.xml的path时 xml文件应该在src目录下,否则会出现空指针异常
2.1 Jsoup快速入门
在这里插入代码片
/** * Jsoup快速入门 */
public class JsoupDemo01 {
public static void main(String[] args) throws IOException {
//2.1获取student.xml的path
String path = JsoupDemo01.class.getClassLoader().getResource("student.xml").getPath();
//2.2解析xml文档,加载文档进内存,获取dom树--->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象 Element
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());
//3.1获取第一个name的element对象,第一个对象的索引是0
Element element = elements.get(0);
//3.2 获取数据
String text = element.text();
System.out.println(text);
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student number="heima_0001">
<name id="itcast">
<xing>张</xing>
<ming>三</ming>
</name>
<age>18</age>
<sex>male</sex>
</student>
<student number="heima_0002">
<name>jack</name>
<age>18</age>
<sex>female</sex>
</student>
</students>
2.2 Jsoup_Jsoup对象
* 对象的使用:
1. Jsoup:工具类,可以解析html或xml文档,返回Document
* parse:解析html或xml文档,返回Document
* parse(File in, String charsetName):解析xml或html文件的。
* parse(String html):解析xml或html字符串
* parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
/** * Jsoup快速入门 */
public class JsoupDemo02 {
public static void main(String[] args) throws IOException {
//2.1获取student.xml的path
String path = JsoupDemo02.class.getClassLoader().getResource("student.xml").getPath();
//2.2解析xml文档,加载文档进内存,获取dom树--->Document
/* Document document = Jsoup.parse(new File(path), "utf-8"); System.out.println(document);//返回字符串表示的xml文档*/
//2. parse (String html):解析xml或html字符串
/* String str ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + "\n" + "<students>\n" + " <student number=\"heima_0001\">\n" + " <name id=\"itcast\">\n" + " <xing>张</xing>\n" + " <ming>三</ming>\n" + " </name>\n" + " <age>18</age>\n" + " <sex>male</sex>\n" + " </student>\n" + " <student number=\"heima_0002\">\n" + " <name>jack</name>\n" + " <age>18</age>\n" + " <sex>female</sex>\n" + " </student>\n" + "\n" + "</students>"; Document document = Jsoup.parse(str); System.out.println(document);//同样可以解析xml文档 */
//3.parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
URL url = new URL("https://www.baidu.com/");
Document document = Jsoup.parse(url, 10000);
System.out.println(document);//解析成html文档
}
}
2.3 Jsoup_document对象
document对象继承自element对象
2. Document:文档对象。代表内存中的dom树
* 获取Element对象
* getElementById(String id):根据id属性值获取唯一的element对象
* getElementsByTag(String tagName):根据标签名称获取元素对象集合
* getElementsByAttribute(String key):根据属性名称获取元素对象集合
* getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
/** * document对象的功能 */
public class JsoupDemo03 {
public static void main(String[] args) throws IOException {
//1.获取student.xml的path
String path = JsoupDemo03.class.getClassLoader().getResource("student.xml").getPath();
//2.获取document对象
Document document = Jsoup.parse(new File(path), "utf-8");
//3.获取元素对象。
//3.1 获取所有的student对象
Elements elements = document.getElementsByTag("student");
System.out.println(elements);
System.out.println("-------------");
//3.2获取属性名为id的元素对象们
Elements elements1 = document.getElementsByAttribute("id");
System.out.println(elements1);
//3.2 获取number属性值为heima_0001的元素对象
Elements elements2 = document.getElementsByAttributeValue("number", "heimai_0001");
System.out.println(elements2);
//3.3获取id属性值的元素对象
Element itcast = document.getElementById("itcast");
System.out.println(itcast);
}
}
2.4 Jsoup_Element对象
3. Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用
4. Element:元素对象
1. 获取子元素对象
* getElementById(String id):根据id属性值获取唯一的element对象
* getElementsByTag(String tagName):根据标签名称获取元素对象集合
* getElementsByAttribute(String key):根据属性名称获取元素对象集合
* getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
2. 获取属性值
* String attr(String key):根据属性名称获取属性值
3. 获取文本内容
* String text():获取文本内容
* String html():获取标签体的所有内容(包括字标签的字符串内容)
5. Node:节点对象
* 是Document和Element的父类
2.4 Jsoup_根据 选择器查询
* 快捷查询方式:
1. selector:选择器
* 使用的方法:Elements select(String cssQuery)
* 语法:参考Selector类中定义的语法
2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
* 使用Jsoup的Xpath需要额外导入jar包。
* 查询w3cshool参考手册,使用xpath的语法完成查询
/** * 选择器查询 */
public class JsoupDemo05 {
public static void main(String[] args) throws IOException {
//1.获取student.xml的path
String path = JsoupDemo05.class.getClassLoader().getResource("student.xml").getPath();
//2.获取document对象
Document document = Jsoup.parse(new File(path), "utf-8");
//3.查询name标签
/* div{ } */
Elements elements = document.select("name");
System.out.println(elements);
System.out.println("----------");
//4.查询id值为itcast的元素 id选择器 写法: #id
Elements elements1 = document.select("#itcast");
System.out.println(elements1);
System.out.println("-----------");
//5.获取student标签并且number属性值为heima_0001的age子标签
//5.1获取student标签并且number属性值为heima_0001
Elements elements2 = document.select("student[number=\"heima_0001\"]");
System.out.println(elements2);
System.out.println("-----");
//5.2 获取student标签并且number属性值为heima_0001的age子标签
Elements elements3 = document.select("student[number=\"heima_0001\"] > age");
System.out.println(elements3);
}
}
2.4 Jsoup_根据Xpath查询
XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
* 使用Jsoup的Xpath需要额外导入jar包。
* 查询w3cshool参考手册,使用xpath的语法完成查询
/** * Xpath查询 */
public class JsoupDemo06 {
public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
//1.获取student.xml的path
String path = JsoupDemo06.class.getClassLoader().getResource("student.xml").getPath();
//2.获取document对象
Document document = Jsoup.parse(new File(path), "utf-8");
//3.根据document对象,创建JXDocument对象
JXDocument jxDocument = new JXDocument(document);
//4.结合xpath语法查询
//4.1 查询所有的student对象
List<JXNode> jxNodes = jxDocument.selN("//student");
for (JXNode jxNode : jxNodes) {
System.out.println(jxNode);
}
System.out.println("------------");
//4.2 查询student标签下的name标签
List<JXNode> jxNodes1 = jxDocument.selN("//student/name");
for (JXNode jxNode : jxNodes1) {
System.out.println(jxNode);
}
System.out.println("--------------");
//4.3 查询student标签下带有id属性的name标签
List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");
for (JXNode jxNode : jxNodes2) {
System.out.println(jxNode);
}
System.out.println("---------------");
//4.4 查询student标签下带有id属性的name标签,并且id的属性值为itcast
List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='itcast']");
for (JXNode jxNode : jxNodes3) {
System.out.println(jxNode);
}
}
}
边栏推荐
- Add music to the program interface and load background photos.
- Super practical! After reading the kubernetes study notes hidden by Alibaba P9, call NB directly
- [MIT 6.S081] Lab 11: networking
- 贴牌“美国制造”,国产安防设备竟被装上了美航母!
- 【学习笔记】热点账户问题的解决方案
- Getting started with typora: the most complete tutorial in the whole network
- Year end summary template
- NVIDIA released the world's smallest edge AI supercomputing: 21tops computing power, power consumption is only 10W!
- Press Google and NVIDIA! Alibaba optical 800 chip won the world's first authoritative test again
- [MIT 6.S081] Lec 5: Calling conventions and stack frames RISC-V 笔记
猜你喜欢

美团二面:为什么Redis会有哨兵?

Class not found: “com.parkManagement.dao.DaoTest 测试找不到测试类

【学习笔记】Redis中有序集合zset的实现原理——跳表

深度学习:GAN优化方法-DCGAN案例

Super practical! After reading the kubernetes study notes hidden by Alibaba P9, call NB directly

Deep recognition: thesis reading_ 2s-agcn cvpr2019 (two stream adaptive graph convolution network based on skeleton action recognition)

What every Salesforce developer should know about Dates and Times in Apex

Publish your own NPM component library
![[MIT 6.S081] Lab 11: networking](/img/9d/cca59a662412f3c3c57c26c5987a24.png)
[MIT 6.S081] Lab 11: networking

Resolve merge fields in salesforce
随机推荐
You can't specify target table 'table name' for update in from clause error resolution in MySQL
深度学习:安装包记录
Disassembly of Xiaomi cc9 Pro: the cost of rear five shots is several times that of Xiaolong 855!
Deep learning - VIDEO behavior recognition: paper reading - two stream revolutionary networks for action recognition in videos
[MIT 6.S081] Lec 5: Calling conventions and stack frames RISC-V 笔记
登录页面tableLayout(表格布局)
Redis网红高频面试题三连:缓存穿透?缓存击穿?缓存雪崩?
The latest advanced interview questions for big factories are necessary
JRS-303用法
《华为是谁》纪录短片集登陆BBC:曝光大量任正非不为人知经历
Set up SSO based on SAML 2.0 in salesforce and enable JIT user provisioning (between SF orgs / between SF org and experience cloud / other IDPs)
解决Reids不能被其他IP访问
动态链表2栈的链表存储结构(LinkedStack实现)
[MIT 6.S081] Lab 11: networking
Is it difficult to operate email safely? COREMAIL joins hands with cloud store to create a new ecosystem of corporate email office!
Prevent SQL injection
[MIT 6.S081] Lec 4: Page tables 笔记
Year end summary template
深度学习:GAN案例练习-minst手写数字
[MIT 6.S081] Lec 10: Multiprocessors and locking 笔记