XPath表达式选择未嵌套在UL标记内的所有标签

时间:2014-03-18 09:42:37

标签: c# html xpath

我有一个关于XPath表达式的简单问题,我的HTML看起来像这样。我只想选择DT的孩子的标签。

<div class="product-options" id="product-options-wrapper">
<dl class="last">
<dt>
<ul>
<label class="required">Available Grip Sizes<em>*</em></label>
</ul>
<div><label>other label</label></div>
</dt> 

<dt>
<label>Would you like this racket restrung?</label>
</dt>

<dt>
<label>String Tension</label>
</dt>
</dl>
</div>

My XPath expression: .//div[@id='product-options-wrapper']//dt/label"

我确实尝试使用[not(@class)]表达式,在这个特定的场景中可以使用,但是我不能在我的项目中使用它,因为我在多个文档上使用相同的xpath。

所以我希望我的查询是..选择所有标签除了UL / NESTED在UL之外

非常感谢你

此外,任何人都可以参考一个好的网站来深入学习XPath查询/表达式吗?

1 个答案:

答案 0 :(得分:0)

如果&#39;除了孩子之外的所有人都不知道&#39;所有孩子都是ul&#39; 那么XPath看起来像

//div[@id='product-options-wrapper']//dt/ul//label

使用HtmlAgilityPack获取这些标签看起来像

HtmlDocument doc = new HtmlDocument();
doc.Load(path_to_html_file);
string xpath = "//div[@id='product-options-wrapper']//dt/ul//label";
var labels = doc.DocumentNode.SelectNodes(xpath);

结果是

<label class="required">Available Grip Sizes<em>*</em></label>

更新:完全改变问题之后,解决方案将是(实际上你有这个要求的正确XPath)

//div[@id='product-options-wrapper']//dt/label

结果是

<label>Would you like this racket restrung?</label>
<label>String Tension</label>