<li class="sn-g">
<span class="num">1</span>
<span class="sym_first">
<a class="icon> </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
}
}
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
}