2015-06-14 58 views
1

我在獲取XPATH表達式結果時遇到了這個小問題!(//。)XPath中的表達式

比方說,我有這個小XML文件:

<bookstore> 
<book> 
    <title lang="en">Learning Java</title> 
    <price>29.99</price> 
</book> 

<book> 
    <title lang="en">Learning Xpath</title> 
    <price>39.95</price> 
</book> 
</bookstore> 

會是怎樣的結果:

//book[//.='Lear'] 

謝謝

+0

你想找什麼,所有書中有'Lear'標題的書? – OldProgrammer

+1

由於你的根元素是'/ bookstore',所以'/ book'將不會返回任何元素 –

回答

0

如果你正在努力尋找包含標題的所有書籍與'李爾',試試這個:

//book[contains(title,'Lear')] 
+0

謝謝,但是你能告訴我雙斜槓符號後點的有用嗎? – Karabatich

0

//book選擇作爲當前上下文的後代的所有book元素(在您的情況下這將是根元素)。

[]表示適用於選擇的條件,因此實質上您將過濾book元素。

方括號[]當前上下文變得book內部,//指書的任何後代。 .只是表示這裏用於應用=運算符的元素本身。所以//意味着所有的子孫,//.表示「接下來適用於這是任何descendant`元素

+0

「* ... so'//'表示'book' *」的任何後裔。這部分是錯誤的。 ''。''而不是'''是真的。 f.e試試'// book [// title ='學習Java']',這會返回'book'元素 – har07

1

會是怎樣的結果。

//book[//.='Lear']

您可以隨時轉儲XML sample和xpath表達式,並自己查看結果(使用http://www.freeformatter.com/xpath-tester.html或任何你喜歡的方法)。對於上面的xpath和XML示例,結果是沒有用的。給定特定的XML輸入,上面的xpath表達式是與相同。謂詞([]的內容)評估爲false,因爲沒有包含精確字符串"Lear"的元素。

「但是你能告訴我雙斜槓符號後點有什麼用處嗎?」

要回答這個問題的評論,請參閱以下擊穿:

  • //:縮寫語法descendant-or-self軸。

  • .:引用當前上下文節點。

  • //.:您可以將其讀取爲在XML文檔中的任意位置查找任何節點。這也可以表示爲//self::node()。請注意,//從根元素開始搜索,它不關心當前的book元素是上下文。

+0

那麼'''''''''''''''''''' – revo

+0

@revo''* *'只返回*後代**元素***(不包括文本節點和當前節點),而'//。'返回*後代**和自節點***。 F.e嘗試'//書[1] // *'vs'// book [1] //。' – har07

+0

@Karabatich現在對你來說很清楚嗎?如果是,請考慮接受答案:http://stackoverflow.com/help/someone-answers – har07