2011-04-18 66 views
23

我在Android上編寫Java以從XML文件檢索數據,但是我遇到了問題。考慮這個XML:Xpath使用開始功能

<ITEM> 
    <REVENUE_YEAR>2554-02</REVENUE_YEAR> 
    <REGION>Central</REGION> 
</ITEM> 
<ITEM> 
    <REVENUE_YEAR>2552-02</REVENUE_YEAR> 
    <REGION>Central</REGION> 
</ITEM> 
<ITEM> 
    <REVENUE_YEAR>2552-03</REVENUE_YEAR> 
    <REGION>Central</REGION> 
</ITEM> 

我怎樣才能在年中的所有元素的啓動與2552我想:

//REVENUE_YEAR[starts-with(.,'2552')]/text() 

它的工作原理,但是當我嘗試:

//REVENUE_YEAR[starts-with(.,'2552')]/REGION/text() 

它不起作用。

回答

39

用途:

/*/ITEM[starts-with(REVENUE_YEAR,'2552')]/REGION 

注意:除非你的主機語言不能處理元素實例作爲結果,不要使用文本混合內容的數據模型專門節點。當架構衆所周知時,不要使用//運算符開始表達式。

+0

我不明白這一點......爲什麼使用/ * /一遍嗎?我在Selenium中遇到了XPath的類似問題,我添加了*而不是我的初始值,它也可以工作:GetByxPath(string.Format(「/ */tbody [@ id ='someContainer']/tr/td [ 1]/a(starts-with(@href,{0})「,」/ Customers /「)); – PositiveGuy 2012-03-07 18:21:22

+0

Speed。//非常慢如果可以的話,您總是希望從頂部搜索,因爲它是更快速。 – PRMan 2017-08-05 23:14:34

5

用途:

//REVENUE_YEAR[starts-with(.,'2552')]/../REGION/text() 
2

試試這個

//ITEM/*[starts-with(text(),'2552')]/following-sibling::* 
+4

解釋的答案,如[this](http://stackoverflow.com/a/5705866/1677912)比單純的「嘗試這個」更好(並獲得更多投票) //stackoverflow.com/a/17786221/1677912)。 – Mogsdad 2015-11-18 12:06:54