我有一个关于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查询/表达式吗?
答案 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>