print $tree->findvalue('//a[1]');
我在perl中使用HTML::TreeBuilder::XPath
。现在我希望上面的语句返回第二个“a”元素的值,但它返回页面中所有“a”元素的值。我不明白为什么?
答案 0 :(得分:8)
你拥有的东西应该首先归还每个元素的孩子
所以//a[1]
将按如下方式工作(结果将是2个节点):
X
Y
a <-- give you this
a
Z
a <-- and this
a
尝试(//a)[1]
而不是
答案 1 :(得分:3)
XPATH表达式在文档的每个级别查找所有a
元素,谓词过滤器在每一步选择第一个a
。
因此,根据XML的结构,您可能无法获得每个 a
元素(如果有多个a
是兄弟姐妹,那么您只会得到这些兄弟姐妹中的第一个)。
但是,如果您打算只选择文档中的第一个a
,则可以使用以下表达式:(//a)[1]
在括号中包含//a
的选择会创建一个集合,然后应用谓词过滤器,选择集合中的第一个,而不是在{{的每一步遇到的第一个a
1}}。