Java使用XPath解析XML示例分享
XPath是一种在XML文档中进行导航、搜索和查询的语言,Java提供了内置的XPath解析器,可以使用它来解析XML文档并提取需要的信息。
准备工作
在使用XPath解析XML之前,需要先了解一些基本概念和准备工作:
- XML文档:需要被解析的XML文件。
- XPath表达式:XPath语言用来查询XML文档中的节点。
- XPath解析器:Java提供的内置XPath解析器
javax.xml.xpath.XPath
和javax.xml.xpath.XPathFactory
。
示例一
假设我们有一个XML文件books.xml
,它包含一些书籍的信息,格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<title>Java编程思想</title>
<author>Bruce Eckel</author>
<price>59.00</price>
</book>
<book>
<title>Effective Java 中文版</title>
<author>Joshua Bloch</author>
<price>59.50</price>
</book>
<book>
<title>深入浅出Java</title>
<author>韩顺平</author>
<price>39.90</price>
</book>
</books>
我们要使用XPath解析器来查询出所有图书的标题和作者信息,代码如下:
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class XMLParser {
public static void main(String[] args) throws Exception {
// 创建XPath解析器
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
// 加载XML文档
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse("books.xml");
// 获取所有book节点
NodeList bookNodes = (NodeList)xpath.evaluate("//book", doc, XPathConstants.NODESET);
// 遍历book节点,获取标题和作者信息
for (int i = 0; i < bookNodes.getLength(); i++) {
Node book = bookNodes.item(i);
// 获取标题和作者节点
Node title = (Node)xpath.evaluate("title", book, XPathConstants.NODE);
Node author = (Node)xpath.evaluate("author", book, XPathConstants.NODE);
// 输出标题和作者信息
System.out.println(title.getTextContent() + " - " + author.getTextContent());
}
}
}
在这段代码中,我们首先通过XPathFactory.newInstance()
方法创建了一个XPath解析器对象,然后使用它来查询XML文档中所有的book
节点,并遍历每个book
节点来获取它的标题和作者信息。
示例二
假设我们有一个XML文件students.xml
,它包含一些学生的信息,格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<name>张三</name>
<age>20</age>
<gender>男</gender>
</student>
<student>
<name>李四</name>
<age>21</age>
<gender>女</gender>
</student>
<student>
<name>王五</name>
<age>22</age>
<gender>男</gender>
</student>
</students>
我们要使用XPath解析器来查询出所有年龄为20岁的学生的姓名和性别信息,代码如下:
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class XMLParser {
public static void main(String[] args) throws Exception {
// 创建XPath解析器
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
// 加载XML文档
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse("students.xml");
// 获取所有年龄为20岁的学生节点
NodeList studentNodes = (NodeList)xpath.evaluate("//student[age=20]", doc, XPathConstants.NODESET);
// 遍历学生节点,获取姓名和性别信息
for (int i = 0; i < studentNodes.getLength(); i++) {
Node student = studentNodes.item(i);
// 获取姓名和性别节点
Node name = (Node)xpath.evaluate("name", student, XPathConstants.NODE);
Node gender = (Node)xpath.evaluate("gender", student, XPathConstants.NODE);
// 输出姓名和性别信息
System.out.println(name.getTextContent() + " - " + gender.getTextContent());
}
}
}
在这段代码中,我们使用XPath表达式//student[age=20]
来查询XML文档中所有年龄为20岁的学生节点,并遍历每个学生节点来获取它的姓名和性别信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java使用xpath解析xml示例分享 - Python技术站