HtmlAgility vérifie s'il existe une sous-classe portant un nom spécifique

c# html-agility-pack

Question

<li class="sn-g">
     <span class="num">1</span>
     <span class="sym_first">
          <a class="icon>&nbsp;</a>
     </span>
     <span class="def">...text</span>
</li>

Ma page HTML contient de telles sous-classes. Cependant, la classe sym_first n'est pas toujours présente. Utilisation de HTMLAgility Je veux savoir si la classe sym_first existe dans la page Web. S'il existe, je souhaite obtenir le InnerText de def class.

foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//span[@class='" + sng + "']"))
{
   //How do I write this block?
   if(doc.DocumentNode.SelectNodes("//span[@class='" + symfirst + "']").Contains(xxx)
   {
      //get inner text
   }
} 

Réponse populaire

Vous pouvez essayer d'utiliser SelectSingleNode() et vérifier si la valeur de retour n'est pas null :

if(doc.DocumentNode.SelectSingleNode("//span[@class='sym_first']") != null)
{
    //get inner text
}

ou si vous voulez vérifier la classe sym_first dans li actuel (en supposant que vous parcouriez li dans l'extrait de code en question):

if(node.SelectSingleNode("span[@class='sym_first']") != null)
{
    //get inner text
}

METTRE À JOUR :

En réponse à l'erreur signalée dans le commentaire ci-dessous, essayez de vérifier si la classe def existe également:

var sym_first = node.SelectSingleNode("span[@class='sym_first']");
var def = node.SelectSingleNode("span[@class='def']");
if(sym_first != null && def != null)
{
    //get inner text
}

En fonction des besoins, vous souhaiterez peut-être effectuer une itération uniquement à travers les éléments li qui ont ces contenus spécifiques en premier lieu:

var query = "//li[@class='sn-g'][span[@class='sym_first'] and span[@class='def']]";
foreach (HtmlNode node in doc.DocumentNode.SelectNodes(query))
{
   //get inner text
} 



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