HtmlAgility controlla se esiste una sottoclasse con un nome specifico

c# html-agility-pack

Domanda

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

La mia pagina HTML contiene tali sottoclassi. Tuttavia, la classe sym_first non è sempre presente. Utilizzando HTMLAgility voglio scoprire se la classe sym_first esiste nella pagina web. Se esiste, voglio ottenere l'InnerText dalla classe def .

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

Risposta popolare

Puoi provare a utilizzare SelectSingleNode() e verificare se il valore restituito non è null :

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

o se intendi controllare la classe sym_first all'interno della corrente li (supponendo che tu stia sym_first looping di li nello snippet di codice in questione):

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

AGGIORNARE :

In risposta all'errore riportato nel commento qui sotto, prova a verificare se esiste anche una classe def :

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
}

A seconda dei requisiti, è possibile che si desideri ripetere solo gli elementi li che hanno questi contenuti specifici in primo luogo:

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
} 


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché