xml基础及其解析原理
XML知识
XML(Extensible Markup Language),是W3C组织发布和维护的。
XML允许⽤户⾃定义细节,标签⽤来描述⼀段数据,分为开始标签和结束标签。XML主要⽤来存储数据和⽤作配置⽂件信息。
⼀个XML⽂件分为如下⼏部分内容:
1.⽂档声明
2.元素
3.属性
4.注释
5.CDATA区 、特殊字符
6.处理指令(processing instruction)
XML⽂档声明:
<?xml version="1.0"encoding="UTF-8"standalone="yes"?>
Standalone指明⽂档是否是独⽴的
XML元素指XML⽂件中出现的标签,⼀个标签分为开始标签和结束标签,⼀个标签有如下⼏种书写形式,例如:
包含标签体:<a>www.itcast</a>
不含标签体的:<a></a>, 简写为:<a/>
注意:
对于xml标签中出现的所有空格和换⾏,xml解析程序都会当做便签内容处理。Java获取后可能需要⽤trim()过滤。
Xml元素区分⼤⼩写;不能以数字或下划线开头;不能以xml(或Xml、XML等)开头;不能包含空格;名称中间不能包含冒号。
⼀个标签可以有多个属性,每个属性都有它⾃⼰的名称和取值,例如:
<input name=“text”>
属性值⼀定要⽤双引号(")或单引号(')引起来
定义属性必须遵循与标签相同的命名规范
多学⼀招:在XML技术中,标签属性所代表的信息,也可以被改成⽤⼦元素的形式来描述,例如:
<input>
<name>text</name>
</input>
Xml的注释的形式<!--注释-->
Xml声明之前不能有注释;
Xml注释不能嵌套。
CDATA区:xml⽂档中有些内容不希望让解析引擎解析执⾏,⽽是当做原始数据处理,此时可以将这些内容放到CDATA区中。
<![CDATA[
<;安徽>
<;安庆>
</安庆>
<;合肥>
</合肥>
</安徽>
]]>
Xml可以使⽤xml-stylesheet指令,通知xml解析引擎应⽤css⽂件来显⽰⽂档内容。例如:
<?xml-stylesheet type="test/css"href=""?>
转义字符:
Xml约束:在XML技术⾥,可以编写⼀个⽂档来约束⼀个XML⽂档的书写规范,这称之为XML约束。常⽤的约束技术:
XML DTD 、XML Schema
XML DTD 不能具体约束到数字,⽽只能约束到字符串,例如价格为必须为数字,DTD则只能约束到字符串。DTD现在没有Schema有前景。
Xml编程:
Xml解析⽅式分为两种:dom和sax
dom:(Document Object Model, 即⽂档对象模型) 是 W3C 组织推荐的处理 XML 的⼀种⽅式。
sax: (Simple API for XML) 不是官⽅标准,但它是 XML 社区事实上的标准,⼏乎所有的 XML 解析器都⽀持它。
XML解析器Crimson、Xerces 、Aelfred2
XML解析开发包Jaxp(sun官⽅)、Jdom、dom4j
JAXP 开发包是J2SE的⼀部分,它由l、org.w3c.dom 、l.sax 包及其⼦包组成。在 l.parsers 包中,定义了⼏个⼯⼚类,程序员调⽤这些⼯⼚类,可以得到对xml⽂档进⾏解析的 DOM 或 SAX 的解析器对象。
Dom与sax⽐较:
Dom⽐较消耗内存,因为他要把整个⽂档变成document对象,适合于xml的增删改查(crud);
Sax是逐⾏读取解析,占⽤内存少,解析速度快,缺点是只适合作⽂档的读取,不能做⽂档的crud。
使⽤dom解析,如果⽂档很⼤,会导致jvm内存溢出。Jvm默认最⼤内存64M。在eclipse中的run configurations中arguments中
vm arguments中输⼊-Xmx80m(配置为80M)。
DOM解析编程:
遍历所有节点
查某⼀个节点
删除结点
更新结点
xml标签大全
添加节点
SAX采⽤事件处理的⽅式解析XML⽂件,利⽤ SAX 解析 XML ⽂档,涉及两个部分:解析器和事件处理器:
解析器可以使⽤JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML⽂档。
解析器采⽤SAX⽅式在解析某个XML⽂档时,它只要解析到XML⽂档的⼀个组成部分,都会去调⽤事件处理器的⼀个⽅法,解析器在调⽤事件处理器的⽅法时,会把当前解析到的xml⽂件内容作为⽅法的参数传递给事件处理器。
事件处理器由程序员编写,程序员通过事件处理器中⽅法的参数,就可以很轻松地得到sax解析器解析到的数据,从⽽可以决定如何对数据进⾏处理。
sax解析原理图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。