Java代码实现DOM解析XML文件
package com.pc.domtest;
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 DomTest {
public static void main(String[] args) {
//1、创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
//2、创建DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
//3、通过DocumentBuilder的parse方法解析XML文件
Document document = db.parse("books.xml");
//4、开始解析--获取所有book节点的集合
NodeList bookList = document.getElementsByTagName("book");
for (int i = 0; i < bookList.getLength(); i++) {
//通过item(i)方法获取一个book节点
Node book = bookList.item(i);
//获取book节点的所有属性的集合
NamedNodeMap attrs = book.getAttributes();
//System.out.println("第" + (i+1) + "本书共有" + attrs.getLength() + "个属性");
for (int j = 0; j < attrs.getLength(); j++) {
//通过item(j)方法获取book节点的某一个属性
Node attr = attrs.item(j);
//获取属性名
attr.getNodeName();
//获取属性值
attr.getNodeValue();
}
//解析book节点的子节点
NodeList childNodes = book.getChildNodes();
System.out.println("第" + (i + 1) + "本书共有" + childNodes.getLength() + "个子节点 ");
//遍历childNode获取每个节点的节点名+节点值
for (int j = 0; j < childNodes.getLength(); j++) {
//获取某一个子节点,节点名+节点值
if (childNodes.item(j).getNodeType() == Node.ELEMENT_NODE) {
Node childNode = childNodes.item(j);
String nodeName = childNode.getNodeName();
String textContent = childNode.getTextContent();
System.out.println("*********属性名:" + nodeName + "-----属性值:" + textContent);
//String nodeValue = childNode.getFirstChild().getNodeValue();
//System.out.println("*********属性名:" + nodeName + "-----属性值:" + nodeValue);
}
}
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
}catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
books.xml
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2014</year>
<price>88</price>
</book>
<book>
<id>2</id>
<name>安徒生童话</name>
<author>丹麦</author>
<year>2004</year>
<price>66</price>
</book>
<book id="3">
<id><a>即使他---</a>3</id>
<name>java开发</name>
<author>美国</author>
<year>2000</year>
<price>99</price>
</book>
</bookstore>
备注:
当有许多同一节点属性时,通过item(int index)方式遍历获取内容中的某一条数据
参考:https://www.imooc.com/video/3850