解析XML文件的方式(二)之DOM
2020-02-01 本文已影响0人
风中小酌
0、要处理的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<book id="1001">
<name>JAVA 高级编程</name>
<author>张三</author>
<price>85.72</price>
</book>
<book id="1002">
<name>C++和C#</name>
<author>李失失</author>
<price>125.73</price>
</book>
</books>
1、DOM方式解析XML数据的步骤
a. 创建一个DocumentBuilderFactory对象
b. 创建一个DocumentBuilder对象
c. 通过DocumentBuilder的parse()方法,得到Document对象
d. 通过getElementsByTagName()方法,获取节点的列表
e. 使用for循环遍历节点
f. 得到所有节点的属性和属性值
g. 得到所有节点的节点名和节点值
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class TestDom4Xml {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
//通过DocumentBuilder的parse()方法,得到Document对象
Document doc = db.parse("book.xml");
//通过getElementsByTagName()方法,获取节点的列表
NodeList nodelist = doc.getElementsByTagName("book");
System.out.println(nodelist.getLength());
//使用for循环遍历节点
for(int i=0;i<nodelist.getLength();i++){
Node node = nodelist.item(i);
//得到所有节点属性和属性值的对象
NamedNodeMap nnm = node.getAttributes();
for(int j=0;j<nnm.getLength();j++){
Node sub_node = nnm.item(j);
//得到所有节点的属性和属性值
System.out.println(sub_node.getNodeName() + " : " + sub_node.getNodeValue());
}
//得到所有节点的子节点
NodeList childlist = node.getChildNodes();
for(int j=0;j<childlist.getLength();j++){
Node sub_node = childlist.item(j);
//获取节点类型
short type = sub_node.getNodeType();
//判断节点类型是否不为#text,因会将前一标签的末尾>与下一标签的开头<之间的字符,标记为#text
//因此这里需要进行判断
if(type == Node.ELEMENT_NODE){
//得到所有节点的节点名和节点值
System.out.println(sub_node.getNodeName() + " : " + sub_node.getTextContent());
}
}
}
}
}
2、输出结果如下
2
id : 1001
name : JAVA 高级编程
author : 张三
price : 85.72
id : 1002
name : C++和C#
author : 李失失
price : 125.73