C# XPath表达式,用于选择未嵌套在UL标记中的所有标签
我有一个关于XPath表达式的简单问题要问,我的HTML如下所示。我只想选择DT的子标签C# XPath表达式,用于选择未嵌套在UL标记中的所有标签,c#,html,xpath,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 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"
可用的夹点尺寸*
其他标签
你想把这个球拍重新打一下吗?
弦张力
我的XPath表达式:.//div[@id='product-options-wrapper']//dt/label”
我确实尝试过使用一个[not(@class)]表达式,这在这个特定场景中是可行的,但是我不能在我的项目中使用它,因为我在多个文档上使用相同的xpath
因此,我希望我的查询是..选择所有标签,但不选择UL/嵌套在UL中的子标签
非常感谢你
另外,任何人都可以参考一个好的网站来学习更深入的XPath查询/表达式吗?如果“除了ul的子对象以外的所有对象”都表示“所有对象都是ul的子对象”,那么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>
<label>Would you like this racket restrung?</label>
<label>String Tension</label>
结果是
<label class="required">Available Grip Sizes<em>*</em></label>
<label>Would you like this racket restrung?</label>
<label>String Tension</label>
你想把这个球拍重新调一下吗?
弦张力
all About not a child是否意味着all children?嗨,Sergev,很抱歉,我不得不编辑我的原始帖子。我只想选择DT标记的直接子标签,所以在我的场景中,我只想选择两个标签。@user3091209好的,更新的答案。实际上,现在还不清楚您的问题是什么Hi Sergev,再次抱歉糟糕的描述,我实际上想做的是选择所有标签,它们是DT的直接子元素,其中同级元素不包含- 标记。因此在这种情况下,只选择了两个标记。夹点大小*