如何在XPath中选择具有某些属性的节点?

时间:2014-01-15 18:54:30

标签: c# xpath

我想选择具有属性类的节点,其中某些值没有指定标记。

怎么做?

到目前为止,我有:

html.DocumentNode.SelectNodes("//[@class='value']");

但据我所知,它并不能正常运作。

例如,让我有这样的HTML代码:

<div>
  <div class="value"></div>
  <a class="value"></div>
</div>

它需要回复<div>内的那两个元素,所以<div><a>。这可能吗?

3 个答案:

答案 0 :(得分:3)

所以我相信你想要的正确语法是这样的:

html.DocumentNode.SelectNodes("//*[@class='value']");

当您只查找属性时,您不需要[ ],因为您没有按元素对其进行细化。

答案 1 :(得分:2)

如果要包含根节点,可以使用descendant-or-self访问权限,如下所示:

descendant-or-self::*[@class='value']

如果您不想考虑根节点,请删除-or-self。更重要的是,星号是告诉XPath解析器返回节点集的原因。

答案 2 :(得分:1)

因为您在这里使用HTML类属性,所以我建议使用以下内容:

//*[contains(concat(' ', @class, ' '), ' value ')]

请注意值周围的空格。这将确保您找到元素,即使它们有多个类。仅仅使用@class='value'在这种情况下不起作用。