程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> XML編程總結(七)——使用XPath對象查詢xml文檔,xpathxml

XML編程總結(七)——使用XPath對象查詢xml文檔,xpathxml

編輯:JAVA綜合教程

XML編程總結(七)——使用XPath對象查詢xml文檔,xpathxml


(七)使用XPath對象查詢xml文檔

 XPath,一種為查詢 XML 文檔而設計的查詢語言。XPath 並不是 Java 語言,事實上 XPath 不是一種完整的編程語言。有很多東西用 XPath 表達不出來,甚至有些查詢也無法表達。幸運的是,可以把 XPath 結合到 Java 程序中,這樣就能發揮兩者的優勢了:Java 做 Java 所擅長的,XPath 做 XPath 所擅長的。Java 程序執行 XPath 查詢所需要的應用程序編程接口(API)還因形形色色的 XPath 引擎而各不相同。Xalan 有一種 API,Saxon 使用另一種,其他引擎則使用其他的 API。Java 5 推出了 javax.xml.xpath 包,提供一個引擎和對象模型獨立的 XPath 庫。

在 Java 中計算 XPath 表達式時,第二個參數指定需要的返回類型。有五種可能,都在javax.xml.xpath.XPathConstants 類中命名了常量:

  • XPathConstants.NODESET
  • XPathConstants.BOOLEAN
  • XPathConstants.NUMBER
  • XPathConstants.STRING
  • XPathConstants.NODE

測試代碼:

 1 public class XPathTest {
 2     /**
 3      * 使用不帶命名空間的XPath查詢
 4      * @throws Exception
 5      */
 6     @Test
 7     public void testRetrieveOndNode() throws Exception{
 8         //獲得xml文檔的內存模型
 9         DocumentBuilder builder = DocumentBuilderFactory
10         .newInstance().newDocumentBuilder();
11         Document document = builder.parse(new File("src/main/resource/books.xml"));
12         //創建XPathFactory對象
13         XPathFactory xPathFactory = XPathFactory.newInstance();
14         //獲得XPath對象
15         XPath xPath = xPathFactory.newXPath();
16         //創建XPath表達式對象
17         XPathExpression nodeExpr = xPath.compile("//book[1]");
18         //執行XPath表達式,因為該表達式只能獲得一個節點,所以用XPathConstants.NODE
19         Element element = (Element) nodeExpr.evaluate(document, XPathConstants.NODE);
20         NodeList nodes = element.getChildNodes();
21         for(int i=0;i<nodes.getLength();i++){
22             Node node = nodes.item(i);
23             //獲得節點類型
24             short nodeType = node.getNodeType();
25             if(nodeType==Node.ELEMENT_NODE){
26                 //獲得節點文本,getNodeValue()無法獲得節點的文本
27                 String text=node.getTextContent();
28                 System.out.println(node.getNodeName()+"--"+text);
29             }
30         }
31     }
32 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved