我有一个看起来像这样的html结构:
<ul class='plus'>
<li>cxvcvxcv
</li>
<li>cxvcvxcv
</li>
<li>cxvcvxcv
</li>
<li>cxvcvxcv
<ul>
<li>ewfwefewfwef</li>
<li>gergrjmkuykmuyk</li>
</ul>
</li>
<li>cxvcvxcv
</li>
</ul>
我需要抓住顶级li项目,但不要抓住孩子们的任何项目。
我目前使用HTMLAgilityPack使用此代码获取所有li项:
nodes = document.DocumentNode.SelectSingleNode("//ul[@class=\"plus\"]").SelectNodes(".//li");
我如何调整它以排除儿童中包含的任何lis?
答案 0 :(得分:1)
您可以使用以下内容:
//ul[@class="plus"]/li[not(child::*[local-name() = 'ul'])]
但是当然不将li
节点作为孩子返回ul
节点,我认为您希望将其包含在结果中:
<li>cxvcvxcv
</li>
<li>cxvcvxcv
</li>
<li>cxvcvxcv
</li>
<li>cxvcvxcv
</li>
您将无法将结果“过滤”为您想要的节点,但您可以使用text()
来获取它们:
//ul[@class="plus"]/li/text()
<强>结果:强>
cxvcvxcv
cxvcvxcv
cxvcvxcv
cxvcvxcv
cxvcvxcv
您会将这些视为文本节点,您仍然可以对它们进行迭代,但是您必须考虑它为那些带有子节点的节点设置的空节点。
修改强> 您的其他信息使解决方案更加简单......
//ul[@class="plus"]/li/@href