XPath以查找其第一个子节点包含特定值的节点

时间:2013-09-15 22:17:43

标签: html xpath

我必须根据某列中的值,特别是第一列中的某个行来识别某一行。

此表没有id值或类值。这只是tr'std's

我已经到了

//tr[td="1"]

但是只查找其中包含任何tabledata的表行,其文本与值1匹配,而不仅仅是匹配1的第一个td

我不确定如何处理td中的第一个tr并将其与某个值匹配。我认为,一旦有了这个,我就可以使用/ancestor::td这样的东西来回到td

有人可以帮忙吗?任何帮助将不胜感激。

修改

在发布此问题后的两分钟内,我想出了这个

//tr/td[position() = 1 and text() = "pizza 1"]

这使得我选择第一个td文本值为“披萨1”,所以现在我只需要能够根据它选择tr。

2 个答案:

答案 0 :(得分:3)

您可以使用嵌套谓词过滤器来查找第一个TD元素包含“1”的任何TR元素。

//tr[td[position() = 1 and contains(., '1')]]

答案 1 :(得分:1)

如果您想要匹配td的第一个1,可以使用:

//tr[td="1"][1]

在您进行编辑后,要获取父级,您可以使用..,因此:

//tr/td[position() = 1 and text() = "pizza 1"]/..

会为您提供tr而不是td

更新

如果你有多行匹配并且只想要第一行,你仍然可以使用[1],只需在整个表达式之外使用它(注意整个表达式周围的()[1]):

(//tr/td[position() = 1 and text() = "1"]/..)[1]