目录
-
语法
- 第一行必须写文档声明,第一行空着都不行,语法要求很严格
-
组成部分
-
文档声明
- 格式<?xml 属性列表 ?>
- 尖括号和问号之间不能有空格
- 属性列表
- version:必须的属性
- encoding:用来指明xml文档的编码的
- 格式<?xml 属性列表 ?>
- 指令
- 也可以给xml文档设置属性(使用CSS即可)
- 标签
- 属性
- 文本
-
-
约束
- 程序员与框架交流的媒介
- 只需要会用就行了
- 约束分类
-
DTD
-
Schema
- 可以规定标签体里面的内容
- 引入
- 特别复杂,没看懂,记住就行了
- 引入代码
<?xml version="1.0" encoding="UTF-8" ?> <!-- 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" > <student number="heima_0002"> <name>tom</name> <age>256</age> <sex>female</sex> </student> </students>
- 约束代码
<?xml version="1.0"?> <xsd:schema xmlns="http://www.itcast.cn/xml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.cn/xml" elementFormDefault="qualified"> <xsd:element name="students" type="studentsType"/> <xsd:complexType name="studentsType"> <xsd:sequence> <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="studentType"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="age" type="ageType"/> <xsd:element name="sex" type="sexType"/> </xsd:sequence> <xsd:attribute name="number" type="numberType" use="required"/> </xsd:complexType> <xsd:simpleType name="sexType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="male"/> <xsd:enumeration value="female"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="ageType"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="256"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="numberType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="heima_\d{4}"/> </xsd:restriction> </xsd:simpleType> </xsd:schema>
-
-
解析
- 将文档中的数据读取到内存中
-
解析方式
- 面试可能会问
-
DOM
- 一次性将所有数据全部读取到内存中去
- 形成dom树
- 多用于服务器端开发
-
SAX
- 一次读取一行,基于事件驱动
- 原理
- 一次读取一行,读一行释放一行。当读取到不同的标签时,也会触发不同的事件(读取到head时执行某某,读取到p时执行某某),这就是基于事件驱动
- 多用于移动端开发,比如手机之类的性能不太强的设备
- 只能读,不能改
-
常见的解析器
- 解析器都是根据上面的两种思想(DOM、SAX)来制作的
-
JAXP
- 官方的,不好用,没人用
-
DOM4J
- 好用,但是今天不学
-
Jsoup
- 本来是用来解析HTML的,但是也可以拿来解析xml文档,效果也不错
- 步骤
- 导入 jar 包
- 获取 Document 对象
- 获取对应的标签 Element 对象
- 获取数据
-
//获取文件路径 URL url = Main01.class.getClassLoader().getResource("student.xml"); String path = url.getPath(); //获取dom对象,代表dom树形结构 Document document = Jsoup.parse(new File(path), "utf-8"); //获取元素 //返回值是一个ArrayList数组 Elements name = document.getElementsByTag("name"); System.out.println(name.size()); for (Element element : name) { System.out.println(element.text());//打印元素的值 }
-
- 对象的使用
- Jsoup
- parse (URL url, inttimeoutMillis) :通过网络路径获取指定的 html 或 xml 的文档对象
- 可以用于制作小型的网络爬虫
- parse (URL url, inttimeoutMillis) :通过网络路径获取指定的 html 或 xml 的文档对象
- Document
- 主要用来获取Element对象的
- Element
- 也可以使用方法来获取他的子标签
- 方法
- String text(): 获取文本内容
- 也会把子标签的文本内容全部获取出来
- String html(): 获取标签体的所有内容 ( 包括字标签的字符串内容 )
- String text(): 获取文本内容
- Node:结点对象
- Jsoup
- PULL
- 安卓内置解析器,解析SAX的
-
快捷查询方式
-
selector:选择器
- 使用标签选择器来快速查找到想要的数据
- 类似于css代码中的选择器
-
Xpath
- 依旧会用到Jsoup解析器
- 使用之前需要导入jar包
-
//获取文件路径 String path = Main01.class.getClassLoader().getResource("student.xml").getPath(); //获取document对象 Document document = Jsoup.parse(new File(path), "utf-8"); //获取jxDocument对象 JXDocument jxDocument = new JXDocument(document); //使用语句查询 List<JXNode> jxNodes = jxDocument.selN("//student[@number='s01']/sex"); for (JXNode jxNode : jxNodes) { System.out.println(jxNode); }
-