print $tree->findvalue('//a[1]');
我在perl中使用了HTML::TreeBuilder::XPath
。現在我期望上面的語句返回第二個「a」元素的值,但是它會返回頁面中所有「a」元素的值。我不明白爲什麼?爲什麼遵循XPath語句返回所有「a」元素?
print $tree->findvalue('//a[1]');
我在perl中使用了HTML::TreeBuilder::XPath
。現在我期望上面的語句返回第二個「a」元素的值,但是它會返回頁面中所有「a」元素的值。我不明白爲什麼?爲什麼遵循XPath語句返回所有「a」元素?
你有什麼應該返回每個元素的第一個孩子。
所以//a[1]
將工作如下(結果將是2個節點):
X
Y
a <-- give you this
a
Z
a <-- and this
a
嘗試(//a)[1]
代替
即XPATH表達式查找所有a
元件在文檔的每一個級別和謂詞過濾器選擇每一步首先需要a
。
所以,這取決於你的XML是如何組織的,你可能無法得到每a
元素(如果有一個以上的a
那名兄弟姐妹,你只會得到那些兄弟姐妹的第一個)。
但是,如果您打算在文檔中只選擇第一a
,你可以使用這個表達式:(//a)[1]
纏繞在括號//a
選擇創建一個集合,謂詞過濾器,然後應用,選擇集合中的第一個,而不是在//
的每個步驟遇到的第一個a
。
+1很好的可視化解釋和簡潔的解釋。 – 2010-08-19 04:08:39
[Xacobeo](http://p3rl.org/Xacobeo)可以以交互方式執行此可視化。 – daxim 2010-08-19 06:41:48