我想选择具有属性类的节点,其中某些值没有指定标记。
怎么做?
到目前为止,我有:
html.DocumentNode.SelectNodes("//[@class='value']");
但据我所知,它并不能正常运作。
例如,让我有这样的HTML代码:
<div>
<div class="value"></div>
<a class="value"></div>
</div>
它需要回复<div>
内的那两个元素,所以<div>
和<a>
。这可能吗?
答案 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'
在这种情况下不起作用。