выбор элементов ul li под div-классом с использованием пакета html agility pack

.net c# html 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>

Еще раз, я хочу получить все неупорядоченные элементы списка в вышерасположенной структуре 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);

теперь мне нужно выражение для извлечения элементов ul li.

Принятый ответ

Это должно работать нормально:

IEnumerable<string> listItemHtml = htmlDoc.DocumentNode.SelectNodes(
    @"//div[@class='outer']/div[@class='divContent']/ul/li")
    .Select(li => li.OuterHtml);

Пример: https://dotnetfiddle.net/fnDPLB


Обновление, основанное на комментариях ниже:

Если вы хотите найти только <li> элементы, принадлежащие элементам <ul> которые являются прямыми братьями из элемента <h4> со значением «SomeSubtitle», вот выражение XPath, которое должно работать:

//div[@class='outer']      // Get div.outer
/div[@class='divContent']  // under that div, find div.divContent
/h4[text()='SomeSubtitle'] // under div.divContent, find an h4 with the value 'SomeSubtitle'
/following::ul[1]/li       // Get the first ul following the h4 and then get its li elements.

Пример: https://dotnetfiddle.net/AfinpV



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему