Java获取XML格式节点
引言
XML(eXtensible Markup Language)是一种常用的表示和传输数据的标记语言。在Java开发中,我们经常需要读取和操作XML文件。本文将介绍Java中获取XML格式节点的方法,并附带代码示例。
XML基本结构
XML文档由元素(element)、属性(attribute)、文本(text)和注释(comment)组成。下面是一个简单的XML示例:
<bookstore>
<book category="children">
<title>Harry Potter</title>
<author>J.K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在这个示例中,bookstore
是根元素,book
是子元素。book
元素有一个category
属性,以及若干子元素(title
、author
、year
和price
)。我们的目标是使用Java代码获取这些节点的值。
使用DOM解析器
DOM(Document Object Model)是一种以树状结构表示XML文档的标准,Java提供了DOM解析器来解析和操作XML文档。
首先,我们需要创建一个DOM解析器对象:
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
public class XMLParser {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("books.xml");
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码创建了一个DocumentBuilderFactory
对象和一个DocumentBuilder
对象,然后使用parse
方法将XML文件解析为一个Document
对象。需要注意的是,我们需要捕获可能抛出的异常。
接下来,我们可以使用Document
对象获取节点的值。下面是一些常用的方法:
getElementsByTagName
:根据元素名称获取节点列表;getAttribute
:获取属性的值;getTextContent
:获取文本节点的值。
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
public class XMLParser {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("books.xml");
NodeList bookList = document.getElementsByTagName("book");
for (int i = 0; i < bookList.getLength(); i++) {
Node bookNode = bookList.item(i);
if (bookNode.getNodeType() == Node.ELEMENT_NODE) {
Element bookElement = (Element) bookNode;
String category = bookElement.getAttribute("category");
String title = bookElement.getElementsByTagName("title").item(0).getTextContent();
String author = bookElement.getElementsByTagName("author").item(0).getTextContent();
int year = Integer.parseInt(bookElement.getElementsByTagName("year").item(0).getTextContent());
double price = Double.parseDouble(bookElement.getElementsByTagName("price").item(0).getTextContent());
System.out.println("Category: " + category);
System.out.println("Title: " + title);
System.out.println("Author: " + author);
System.out.println("Year: " + year);
System.out.println("Price: " + price);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码通过getElementsByTagName
方法获取book
元素的节点列表,并使用getAttribute
和getTextContent
方法获取属性和文本节点的值。需要注意的是,节点列表是从0开始索引的。
使用XPath表达式
XPath是一种使用路径表达式在XML文档中进行导航和查询的语言。Java提供了XPath解析器来执行XPath表达式。
首先,我们需要创建一个XPath解析器对象:
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
public class XMLParser {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("books.xml");
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
} catch (Exception e) {
e.printStackTrace();
}
}
}