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