一、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(); } } }
結果截圖: