前言
文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。html,xml都是基于这个模型构造的。这也是一个W3C推出的标准。java,python,javascript等语言都提供了一套基于dom的编程接口。
java使用dom解析xml
一段xml文档, note.xml:
George
John
Reminder
我们先使用w3c dom解析该xml:
@Test
public void test() {
NodeList nodeList = doc.getChildNodes().item(0).getChildNodes();
System.out.println("xml size: " + nodeList.getLength());
for(int i = 0; i < nodeList.getLength(); i ++) {
Node node = nodeList.item(i);
System.out.println(node.getNodeType());
System.out.println(node.getNodeName());
}
}
输出:
xml size: 9
3
#text
1
to
3
#text
1
from
3
#text
1
heading
3
#text
1
body
3
#text
我们看到代码输出note节点的字节点的时候,有9个节点,但是xml文档中note节点实际上只有to、from、heading、body4个节点。 那为什么是9个呢,原因是这样的。
选取几个w3c规范中关于节点类型的描述:
节点类型
描述
nodeName返回值
nodeValue返回值
子元素
类型常量值
Document
表示整个文档(DOM 树的根节点)
#document
null
Element(max. one),Comment,DocumentType
9
Element
表示 element(元素)元素
element name
null
Text,Comment,CDATASection
1
Attr
表示属性
属性名称
属性值
Text
2
Text
表示元素或属性中的文本内容。
#text
节点内容
None
3
CDATASection
表示文档中的 CDATA 区段(文本不会被解析器解析)
#cdata-section
节点内容
None
4
Comment
表示注释
#comment
注释文本
None
8
下面解释一下文档节点的字节点的处理过程:
其中红色部分为Text节点,紫色部分是Element节点(只画了部分)。