java 中对 xml 文档的解析可以分为四种方式:DOM、JDOM、SAX、DOM4J。我们这儿用的是 DOM 的解析。
注意:创建document对象和element对象时候需要进行导包,这里导入的包应该是org.w3c.dom.Document和org.w3c.dom.Element,否则没有提供操纵XML的api,会报错。此demo 里需要导入的剩下的包都是 javax.xml 下的包。
首先:要有一个 xml 文档(在 eclipse 中新建一个 .xml 格式的文件,或者粘贴一个)
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>懂得生活</name>
<author>Mr Azzan</author>
<year>2017</year>
<price>100.00</price>
</book>
<book id="2">
<name>热爱生活</name>
<author>Miss Sun</author>
<year>2017</year>
<price>121.00</price>
</book>
<book id="3">
<name>品味生活</name>
<author>Miss Sun</author>
<year>2016</year>
<price>111.00</price>
</book>
<book id="4">
<name>珍惜生活</name>
<author>Miss Azzan</author>
<year>2014</year>
<price>100.00</price>
</book>
</bookstore>
其次:编写解析代码
package com.test.xml;
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.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DomDemo {
/**
* 读取一个 xml 文档
*/
public static void test1() {
// 创建一个工厂来创建流水线 创建一个构造器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
// 通过创建一个工厂来创建流水线 创建一个构造器
DocumentBuilder builder = factory.newDocumentBuilder();
// 构造文档
Document doc = builder.parse("books.xml");
// 获取一个根元素
Element root = doc.getDocumentElement();
System.out.println("读取一个 xml 文档");
// 获取一个元素节点名称
System.out.println(root.getNodeName());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取指定的元素集合 并且获取元素的属性信息
*/
public static void test2() {
// 创建一个工厂来创建流水线 创建一个构造器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
// 通过创建一个工厂来创建流水线 创建一个构造器
DocumentBuilder builder = factory.newDocumentBuilder();
// 构造文档
Document doc = builder.parse("books.xml");
// 根据元素名 标签名 来获取所有的元素 小知识 ===》 Ctry+q 回到当前的位置
NodeList studentList = doc.getElementsByTagName("book"); // NodeList 是一个数组
System.out.println("获取指定的元素集合 并且获取元素的属性信息");
// studentList.getLength(); 数组元素的长度
for (int i = 0; i < studentList.getLength(); i++) {
// 遍历内容 出来一个具体的节点
Node student = studentList.item(i);
// 用 .getNodeName() 方法 ,获取 student 的名称
System.out.print(student.getNodeName());
System.out.print("===>");
// 打印属性名
System.out.print(student.getAttributes().item(0).getNodeName() + ",");
// 打印属性名的信息值 node节点 item 逐条列出 Attributes 属性
System.out.println(student.getAttributes().item(0).getNodeValue());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取元素的子元素集合,并解析元素文本内容
*/
public static void test3() {
// 创建一个工厂来创建流水线 创建一个构造器
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
// 通过创建一个工厂来创建流水线 创建一个构造器
DocumentBuilder builder = factory.newDocumentBuilder();
// 构造文档
Document doc = builder.parse("books.xml");
// 根据元素名 标签名 来获取所有的元素 小知识 ===》 Ctry+q 回到当前的位置
NodeList studentList = doc.getElementsByTagName("book"); // NodeList 是一个数组
System.out.println("获取元素的子元素集合,并解析元素文本内容");
// studentList.getLength(); 数组元素的长度
for (int i = 0; i < studentList.getLength(); i++) {
// 遍历内容 出来一个具体的节点
Node student = studentList.item(i);
// 获取子元素信息
NodeList nodeList = student.getChildNodes();
for (int j = 0; j < nodeList.getLength(); j++) {
Node node = nodeList.item(j);
if ("name".equals(node.getNodeName()) || "author".equals(node.getNodeName())) {
System.out.print(node.getNodeName() + "==>");
System.out.println(node.getTextContent());
}
if ("year".equals(node.getNodeName()) || "price".equals(node.getNodeName())) {
System.out.print(node.getNodeName() + "==>");
System.out.println(node.getTextContent());
}
}
System.out.println();
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println();
}
public static void main(String[] args) {
test1();
System.out.println();
test2();
System.out.println();
test3();
}
}
最后:解析结果如图
@Super_Sunleo
期待你的评论!!!