- Java核心技術(shù)·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 912字
- 2020-10-30 18:10:50
3.4 使用XPath來定位信息
如果要定位某個XML文檔中的一段特定信息,那么,通過遍歷DOM樹的眾多節(jié)點來進行查找會顯得有些麻煩。XPath語言使得訪問樹節(jié)點變得很容易。例如,假設(shè)有如下XML文檔:

可以通過對XPath表達式/configuration/database/username求值來得到database中的username的值。
使用Xpath執(zhí)行下列操作比普通的DOM方式要簡單得多:
1)獲得文檔節(jié)點。
2)枚舉它的子元素。
3)定位database元素。
4)定位其子節(jié)點中名字為username的節(jié)點。
5)定位其子節(jié)點中的text節(jié)點。
6)獲取其數(shù)據(jù)。
XPath可以描述XML文檔中的一個節(jié)點集,例如,下面的XPath:

描述了根元素gridbag的子元素中所有的row元素。可以用[]操作符來選擇特定元素:

這表示的是第一行(索引號從1開始)。
使用@操作符可以得到屬性值。XPath表達式

描述了第一行第一個單元格的anchor屬性。XPath表達式

描述了作為根元素gridbag的子元素的那些row元素中的所有單元格的anchor屬性節(jié)點。
XPath有很多有用的函數(shù),例如:

返回gridbag根元素的row子元素的數(shù)量。精細的XPath表達式還有很多,請參見http://www.w3c.org/TR/xpath的規(guī)范,或者在http://www.zvon.org/xxl/XPathTutorial/General/examples.html上的一個非常好的在線指南。
Java SE 5.0增加了一個API來計算XPath表達式,首先需要從XPathFactory創(chuàng)建一個XPath對象:

然后,調(diào)用evaluate方法來計算XPath表達式:

你可以用同一個XPath對象來計算多個表達式。
這種形式的evaluate方法將返回一個字符串。這很適合用來獲取文本,比如前面的例子中的username節(jié)點中的文本。如果XPath表達式產(chǎn)生了一組節(jié)點,請做如下調(diào)用:

如果結(jié)果只有一個節(jié)點,則以XPathConstants.NODE代替:

如果結(jié)果是一個數(shù)字,則使用XPathConstants.NUMBER:

不必從文檔的根節(jié)點開始搜索,可以從任意一個節(jié)點或節(jié)點列表開始。例如,如果你有前一次計算得到的節(jié)點,那么就可以調(diào)用:


圖3-5 計算XPath表達式
程序清單3-7中的程序演示了XPath表達式的求值操作。只要載入一個XML文件,鍵入一個表達式,選擇表達式的類型,點擊計算按鈕,表達式的結(jié)果就會在框架底部顯示出來了(見圖3-5)。
程序清單3-7 xpath/XPathTester.java




javax.xml.xpath.XPathFactory 5.0
·static XPathFactory newInstance()
返回用于創(chuàng)建XPath對象的XPathFactory實例。
·XPath newXpath()
構(gòu)建用于計算XPath表達式的XPath對象。
javax.xml.xpath.XPath 5.0
·String evaluate(String expression,Object startingPoint)
從給定的起點計算表達式。起點可以是一個節(jié)點或節(jié)點列表。如果結(jié)果是一個節(jié)點或節(jié)點集,則返回的字符串由所有文本節(jié)點子元素的數(shù)據(jù)構(gòu)成。
·Object evaluate(String expression,Object startingPoint,QName resultType)
從給定的起點計算表達式。起點可以是一個節(jié)點或節(jié)點列表。resultType是XPathConstants類的常量STRING、NODE、NODESET、NUMBER或BOOLEAN之一。返回值是String、Node、NodeList、Number或Boolean。
- 現(xiàn)代C++編程:從入門到實踐
- Implementing Modern DevOps
- Learning Docker
- Mastering OpenCV Android Application Programming
- 深入淺出Java虛擬機:JVM原理與實戰(zhàn)
- Access 2016數(shù)據(jù)庫管
- INSTANT OpenNMS Starter
- 零基礎(chǔ)輕松學(xué)SQL Server 2016
- Visual C#.NET程序設(shè)計
- Getting Started with Gulp
- Android驅(qū)動開發(fā)權(quán)威指南
- Visualforce Developer’s guide
- Django 3.0入門與實踐
- 金融商業(yè)數(shù)據(jù)分析:基于Python和SAS
- Microsoft Dynamics GP 2013 Cookbook