自己动手编写了一个person.xml文件,下面简单的说一下怎么用DOM解析该XML文件。
person.xml文件的 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<People>
<person id="1">
<name>Bob</name>
<age>22</age>
<gender>male</gender>
</person>
<person id="2">
<name>John</name>
<age>23</age>
<gender>female</gender>
</person>
<person id="3">
<name>张三</name>
<age>12</age>
<gender>男</gender>
</person>
</People>
新建一个java工程项目,这里命名为DOMXml项目,新建一个包名为com.xbb.domxml,在包下新建一个java文件,XmlParseByDom.java,然后将person.xml文件copy到项目目录下,项目结构如下图示:
PersonParseByDom.java的内容如下:
package com.xbb.domxml;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class PersonParseByDom {
public static void main(String[] args) {
//DocumentBuilderFactory和DocumentBuilder都是一个抽象类
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db ;
//Document是一个接口
Document doc;
try {
db = dbf.newDocumentBuilder();
//绑定解析person.xml文件
doc = db.parse("person.xml");
//获取person.xml文件中的所有<person>节点,返回类型为NodeList节点集合,这是一个接口,里面封装了两个方法,
//一个是方法是public Node item(int index);返回指定位置的节点;另一个方法是public int getLength();返回节点结合包含 //节点数。
NodeList personList = doc.getElementsByTagName("person");
//打印出person节点数
System.out.println("共有" + personList.getLength() + "个person点");
//遍历每个person节点
for (int i = 0; i < personList.getLength(); i++) {
//获取第i个person节点
Node person = personList.item(i);
System.out.println("-------------------");
//打印person节点的id属性
System.out.println("第"+i+"个person的属性"+person.getAttributes().item(0));
//获取person节点的子节点集合,此处注意空格也属于一个子节点,类型为Node.TEXT_NODE;而我们需要的是Node.ELEMENT_ //NODE类型的子节点
NodeList personChilds = person.getChildNodes();
System.out.println("共有"+personChilds.getLength()+"个子元素");
for (int j = 0; j < personChilds.getLength(); j++) {
if (personChilds.item(j).getNodeType() == Node.ELEMENT_NODE) {
//打印每个子节点名字和值
System.out.println(personChilds.item(j).getNodeName()+":"+personChilds.item(j).getFirstChild().getNodeValue());
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
代码注释已经解释的比较详细。
最后输出结果为:
介绍就到这里了。