use*_*862 1 .net html c# html-agility-pack
<div class="outer">
<div class="divOne"></div>
<div class="divContent">
<h3>SomeTitle</h3>
<h4>SomeSubtitle</h4>
<ul>
<li><a href="/someUrlx.htm">SomeUrl</a>
<span> Nr of records under this url </span>
</li>
</ul>
<h4>Some Other Subtitle</h4>
<ul>
<li><a href="/someUrlx.htm">SomeUrl</a>
<span> Nr of records under this url </span>
</li>
</ul>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
再一次,我想获取上述 html 结构下的所有无序列表项
我可以使用获取 divContent 类内容
var regs = htmlDoc.DocumentNode.SelectSingleNode(@"//div[@class='outer']");
var descendant = regs.Descendants()
.Where(x => x.Name == "div" && x.Attributes["class"].Value == "divContent")
.Select(x => x.OuterHtml);
Run Code Online (Sandbox Code Playgroud)
现在我需要表达式来获取 ul li 项目。
这应该可以正常工作:
IEnumerable<string> listItemHtml = htmlDoc.DocumentNode.SelectNodes(
@"//div[@class='outer']/div[@class='divContent']/ul/li")
.Select(li => li.OuterHtml);
Run Code Online (Sandbox Code Playgroud)
示例: https : //dotnetfiddle.net/fnDPLB
根据以下评论更新:
如果您只想查找<li>属于值为“SomeSubtitle”<ul>的<h4>元素的直接兄弟元素的元素,那么这里有一个应该可以工作的 XPath 表达式:
IEnumerable<string> listItemHtml = htmlDoc.DocumentNode.SelectNodes(
@"//div[@class='outer']/div[@class='divContent']/ul/li")
.Select(li => li.OuterHtml);
Run Code Online (Sandbox Code Playgroud)
示例: https : //dotnetfiddle.net/AfinpV