XML文件的语法
结果:带关系结果(根节点、子节点)
结构严谨:标签必须成对出现
如果没有定义名称空间,不能直接冒号<stu:dent></stu:dent>
标签不能以数字开头,同时不能出现空格
XML文件的属性
使用属性="属性值",可以使用单引号,也可以使用双引号但是不可以既使用单引号又使用双引号
XML文件的注释
<!-- 注释 -->
XML文件的文档声明
<?xml version="1.0" encording="utf-8" ?>
XML文件的转义字符--同HTML
<:<
>:>
空格:
版本所有:©
注册商品:®
CDATA块:<![CDATA[ 内容 >> 一堆标签进行转义
XML解析
Dom4j:这种方式比较麻烦,需要一层一层遍历
Xpath:用于xml文件结构层次比较深的情况,根据xpath表达式语法,可以快速定位某个标签
SAX解析:基于事件编程
Xpath表达式---常用的
/ :表示绝对路径,在xml文件如果"/"在前面 /contact-list(定位到根节点) 如果斜线在中间 /contatc-list/contact,选中子节点contact
// :不分层级关系定位所有标签://contact : 不分层级关系选中所有的contact
* :通配符 /contact-list/* 选中所有contact-list下面的子节点
[ ] :进一步定义元素,类似于定于 /AAA/BBB[1/last()]
@ :定位属性 @属性名称
= ://AAA//BBB[@id='属性值'] 确定属性值/文本值
逻辑与: and <contact id ="003" name="eric"> 表达式 //contact[@id='003' and name = 'eric']
text() ://email[Test()='lisi@163.com'] 定位xxx的文本内容是xxx
SAX解析--jdk中扩展java核心类
事件编程三要素:
事件源
事件监听器:
遇到文档开始处理方法
遇到开始标签处理方法
遇到文本内容的时候触发的方法
遇到结束标签处理方法
遇到文档结束处理方法
注册事件监听:DefaultHandler:基于事件的处理程序
SAX解析和DOM解析的区别
原理:
DOM:一次性加载整个xml文件,如果xml文件结构层次深,OOM异常,浪费空间
SAX:读取一点,加载一点
使用过程:
DOM:不仅能读,还能修改,并且能往返读
SAX:只能去读
编程思想:
DOM:面向对象编程思想编程方式
SAX:面对事件编程思想编程方式
XML约束
DTD约束
内部约束:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>
外部约束:
新建为note.dtd文件
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
新建为note.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
Schema约束
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>