Récupération des éléments ul li sous la classe div en utilisant le pack d'agilité HTML

.net c# html html-agility-pack

Question

<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>

Une fois de plus, je veux récupérer tous les éléments de la liste non ordonnée sous la structure HTML

Je peux récupérer le contenu de la classe divContent en utilisant

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);

maintenant, j'ai besoin d'expression pour aller chercher des objets ul li.

Réponse acceptée

Cela devrait bien fonctionner:

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

Exemple: https://dotnetfiddle.net/fnDPLB


Mise à jour basée sur les commentaires ci-dessous:

Si vous souhaitez rechercher uniquement les éléments <li> appartenant aux éléments <ul> qui sont les frères et soeurs directs d'un élément <h4> avec la valeur "SomeSubtitle", voici une expression XPath qui devrait fonctionner:

//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.

Exemple: https://dotnetfiddle.net/AfinpV



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi