DOM(Document Object Model)是W3C指定的,它不是专门为Java或其他语言而制定的,所以有些地方不大符合Java的风格,如使用NodeList和NameNodeMap而没有使用Java的集合框架类。
DOM把XML在内存中生成一个树结构,了解其结构也就基本了解了DOM。基本结构的主要接口为:
Node <- Document
<- DocumentType
<- Element
<- Entity
<- CharacterData <- Comment
<- Text <- CDATA
所有接口都是扩展Node的,也就是说树中的任何东西都是Node,所以Node是很重要的接口。通过Node的getNodeType()和getNodeValue()分别可以得到节点的类型和节点的值。
节点类型有:
Node.DOCUMENT_NODE
Node.ELEMENT_NODE
Node.TEXT_NODE
Node.CDATA_SECTION_NODE
Node.PROCESSING_INSTRUCTION_NODE
Node.ENTITY_REFERENCE_NODE
Node.DOCUMENT_TYPE_NODE
可以通过以下方式判断
switch(node.getNodeType()){
case Node.Document_NODE:
//...
case Node.ELEMENT_NODE:
//...
}
开始解析:
URI xmlUri=new URI("xml file address");
DOMParser parser = new DOMParser();
parser.parse(xmlUri);
Document doc = parser.getDocument();
不同的解析器的构造方式不同,有的解析器会直接返回Document对象,如下:
Document doc = parser.parse(xmlUri);
Element rootElement = doc.getDocumentElement();
NodeList childrenNodes=rootElement.getChildNodes();
依次类推就可以遍历所有节点,分别处理每个节点即可。值得注意的是文本也是一个节点Text,但是属性则不是一个节点,可以通过Elemenet.getAttributes()获得。其他的也没什么了,参考一下DOM的JavaDoc就OK了。
------值得注意的细节------
1.性能与内存
DOM解析器会把所有的XML文档全部加载到内存中,如果XML文件非常庞大,那么这样的解析器会耗尽内存,导致内存益处异常;当前,很多解析器已经采用了延迟加载设计模式(类似于Hibernate的lazy策略),即只有当具体用刀某个节点数据的时候再去加载该节点,不用的就不加载,这种策略节省了内存的浪费,但是对性能有一定影响。这是有得必有失,需要根据实际情况而定采用什么策略。
2.Node的属性
因为所有节点都是继承Node的,所以任何节点都可以调用getNodeType(),getNodeValue(),getNodeName()之类的方法,但是并不是这些方法对任何节点都有效,比如说对于Element来说,getNodeValue()就无效,因为Element下的文本是Text类表示的,而不是一个String。
3.SAXException
当使用DOM解析器时,如果出现了SAXException,不用惊讶。
分享到:
相关推荐
DOM解析可加载XML文件 对XML文件进行解析 获取结点信息 更新结点信息 及其属性等信息
xml的ppt文档,简要介绍dom解析器
JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax
不同于SAX和DOM的XML高效解析器,内存占用少,速度快,支持XPATH;用多种语言实现,C,JAVA等
tidydom使用golang的编码/ xml标准库作为XML文本流的解析器。使用tinydom提供的接口可以实现简单的XML文件的读取和生成。tinydom包含了的接口设计技巧,提供了丰富的XML元素的查找手段。 如何使用 接口定义 一个XML...
dom4j是一种解析XML文档的开放源代码XML框架。本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。dom4j API包含一个解析XML文档的工具。本文中将使用这个解析器创建一个...DOM解析器不支持使用XPath选择节点。
本系统实现了一个基于DOM的XML生成器和解析器。以树形结构显示了XML文档各节点的关系。点击节点时,可以显示节点的各种信息,还可以对节点进行增加、删除、修改。总之,可以很方便的操作XML文档。
java中用dom解析xml的经典入门级文档
minixml是适合嵌入式系统的xml解析器,支持dom
掌握DOM解析器,包括创建DOM解析器的步骤;Doucument对象的结构。节点的类型,包括Node接口;Node 接口的常用方法;节点的子孙关系。各节点的实例,包括element节点 、Text节点、 Attr节点 、 DocumentType节点、 ...
用C#编写的XML解析器,DOM和SAX都有实现
XML文件解析器 支持dom解析和sax模式解析,c语言实现
利用JSP直接读写XML文件,分别用DOM解析器和SAX解析器加以实现,非常适合初学者入门,作为一个了解jsp与XML的台阶
基于DOM的XML解析器。用法详见内部文档
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好。 TinyXML是一个开源的解析XML的解析库,能够用于C++,...
dom4j.jar的jar包,java解析xml文件的jar包,无脑好用~
用java中的DOM解析器,解析XML文档,并实现一简单通讯录!
XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细XML的四种解析器原理及性能比较,超详细
用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)...Sun公司提供了Java API for XML Parsing(JAXP)接口来使用SAX和DOM,通过JAXP,我们可以使用任何与JAXP兼容的XML解析器