本文一部分来自于易百教程:https://www.yiibai.com/java_xml/ 另一部分来源于网上摘抄...
一、XML
XML--EXtensible Markup Language(可扩展标记语言)是一种很流行的简单的基于文本的语言来用作应用程序之间的通信模式。它被认为是传输标准装置和存储数据。JAVA提供了极好的支持和丰富的库来解析,修改或查询XML文档。
XML是什么?
XML是一种简单的基于文本的语言,它被设计为储存和运输以纯文本格式的数据。它代表着可扩展标记语言。以下是一些XML的显着特征。
-
XML是一种标记语言。
-
XML是一种标记语言就像HTML一样。
-
XML标签不是像HTML那样预定义。
-
可以定义自己的标签,这就是为什么它被称为可扩展的语言。
-
XML标签被设计成自描述性的。
-
XML是W3C推荐用于数据存储和传输。
示例
<?xml version="1.0"?>
<Class>
<Name>First</Name>
<Sections>
<Section>
<Name>A</Name>
<Students>
<Student>Rohan</Student>
<Student>Mohan</Student>
<Student>Sohan</Student>
<Student>Lalit</Student>
<Student>Vinay</Student>
</Students>
</Section>
<Section>
<Name>B</Name>
<Students>
<Student>Robert</Student>
<Student>Julie</Student>
<Student>Kalie</Student>
<Student>Michael</Student>
</Students>
</Section>
</Sections>
</Class>
优势
以下是XML提供的优势:
-
技术无关 - 作为普通文本,XML是技术独立。它可以用于由任何技术进行数据的存储和传输的目的。
-
人类可读 - XML使用简单的文本格式。它是人类可读和可以理解的。
-
可扩展性 - 在XML,自定义标签可以创建和很容易使用。
-
允许验证 - 使用XSD,DTD和XML结构可以很容易地验证。
缺点
下面是使用XML的缺点:
-
冗余的语法 - 通常XML文件中包含大量的重复计算。
-
冗余 - 作为一个冗长的语言,XML文件大小增加了传输和存储成本。
二、Java XML解析器
什么是XML解析?
解析XML是指将通过XML文档访问数据或修改数据的一个操作或方法。
XML解析技术有两种 DOM SAX
-
DOM方式
根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象
- 优点: 便于实现增 删 改 查
- 缺点: XML文件过大可能造成内存溢出
-
SAX方式
采用事件驱动模型边读边解析:从上到下一行行解析,解析到某一元素, 调用相应解析方法
- 优点: 不会造成内存溢出,
- 缺点: 查询不方便,但不能实现 增 删 改
不同的公司和组织提供了针对DOM和SAX两种方式的解析器
- SUN的jaxp
- Dom4j组织的dom4j(最常用:如Spring)
- JDom组织的jdom
关于这三种解析器渊源可以参考java解析xml文件四种方式.
JAXP 解析 Javax.xml.parsers
JAXP是JavaSE的一部分,在javax.xml.parsers包下,分别针对dom与sax提供了如下解析器:
Dom
- DocumentBuilder
- DocumentBuilderFactory
SAX
- SAXParser
- SAXParserFactory
XML解析器是什么?
XML解析器提供方法来访问或修改XML文档中的数据。 Java提供了多种选择来解析XML文档。以下是各种类型解析器其通常用于解析XML文档。
-
Dom解析器 - 解析通过加载该文件的全部内容,并创建其完整分级树中存储的文件。
-
SAX解析器 - 解析基于事件触发器的文档。不完整(部分)的文件加载到存储器中。
-
JDOM解析器 - 解析以类似的方式,以DOM解析器但更简单的方法的文档。
-
StAX解析器 - 解析以类似的方式,以SAX解析器但在更高效的方式的文档。
-
XPath解析器 - 解析基于表达式XML并广泛选择使用XSLT。
-
DOM4J解析器 - Java库来解析XML,XPath和使用Java集合框架XSLT,为DOM,SAX和JAXP的支持。
JAXB和XSLT的API来处理XML解析在面向对象方法。
余下全文见易百教程
三、几种解析器的比较
性能比较
1)DOM4J性能最好,连Sun的JAXM也在用DOM4J.目前许多开源项目中大量采用DOM4J,例如大名鼎鼎的hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性,那就采用DOM4J.
2)JDOM和DOM在性能测试时表现不佳,在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM.虽然JDOM的开发者已经说明 他们期望在正式发行版前专注性能问题,但是从性能观点来看,它确实没有值得推荐之处。另外,DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语 言。它还是许多其它与XML相关的标准的基础,因为它正式获得W3C推荐(与基于非标准的Java模型相对),所以在某些类型的项目中可能也需要它(如在 JavaScript中使用DOM)。
3)SAX表现较好,这要依赖于它特定的解析方式-事件驱动。一个SAX检测即将到来的XML流,但并没有载入到内存(当然当XML流被读入时,会有部分文档暂时隐藏在内存中)。 spring3.2就是基于这个来解析xml
优缺点
DOM解析:
优点:
1、形成了树结构,有助于更好的理解、掌握,且代码容易编写。
2、解析过程中,树结构保存在内存中,方便修改。
缺点:
1、由于文件是一次性读取,所以对内存的耗费比较大。
2、如果XML文件比较大,容易影响解析性能且可能会造成内存溢出。
SAX解析:
优点:
1、采用事件驱动模式,对内存耗费比较小。
2、适用于只处理XML文件中的数据时。
缺点:
1、编码比较麻烦。
2、很难同时访问XML文件中的多处不同数据。
JDOM解析
特征:
1、仅使用具体类,而不使用接口。
2、API大量使用了Collections类。
DOM4J解析
特征:
1、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。
2、它使用接口和抽象基本类方法。
3、具有性能优异、灵活性好、功能强大和极端易用的特点。
4、是一个开放源码的文件