一、book.xml
<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book category="children"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> <book category="web"> <title lang="uk">XQuery Kick Start</title> <author>James McGovern</author> <year>2003</year> <price>49.99</price> </book> </bookstore>
package edu.aeon.xml; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; /** * [说明]:xpath获取节点 * @author aeon(qq:1584875179) * */ public class XpathParser { public static void main(String[] args) { try { DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder(); Document document=documentBuilder.parse("config/book.xml"); XPath xPath= XPathFactory.newInstance().newXPath(); /** * 获取 bookstore 节点下 book 属性 category 值为 web 下的第二个 title 节点的文本内容 * xpath路径为:/bookstore/book[@category='web'][2]/title/text() */ String str1=(String) xPath.evaluate("/bookstore/book[@category='web'][2]/title/text()", document, XPathConstants.STRING); System.out.println(str1); /** * 获取 bookstore 节点下 book 属性 category 值为 web 的 title 属性lang为en 的节点内容 * xpath路径为:/bookstore/book[@category='web']/title[@lang='en']/text() */ String str2=(String) xPath.evaluate("/bookstore/book[@category='web']/title[@lang='en']/text()", document, XPathConstants.STRING); System.out.println(str2); /** * 获取bookstore下book属性category值为cooking的title的lang属性的值 * xpath路径为:/bookstore/book[@category='cooking']/title/@lang */ String str3=(String) xPath.evaluate("/bookstore/book[@category='cooking']/title/@lang", document, XPathConstants.STRING); System.out.println(str3); /** *获取 bookstore 节点下所有 book 的节点集合 */ NodeList nodeBookList=(NodeList) xPath.evaluate("/bookstore/book", document, XPathConstants.NODESET); for(int i=0;i<nodeBookList.getLength();i++){ Element element=(Element) nodeBookList.item(i); String titleValue=(String) xPath.evaluate("title", element, XPathConstants.STRING); String authorValue=(String) xPath.evaluate("author", element, XPathConstants.STRING); String yearValue=(String) xPath.evaluate("year", element, XPathConstants.STRING); String priceValue=(String) xPath.evaluate("price", element, XPathConstants.STRING); System.out.println(titleValue+" "+authorValue+" "+yearValue+" "+priceValue); System.out.println("========================================="); } } catch (Exception e) { e.printStackTrace(); } } }
结果截图: