使用 html 敏捷包获取 div 类下的 ul li 项目

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 项目。

And*_*ker 5

这应该可以正常工作:

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