<li class="sn-g">
<span class="num">1</span>
<span class="sym_first">
<a class="icon> </a>
</span>
<span class="def">...text</span>
</li>
Meine HTML-Seite enthält solche Unterklassen. Die Klasse sym_first
ist jedoch nicht immer vorhanden. Mit HTMLAgility möchte ich herausfinden, ob sym_first
Klasse sym_first
auf der Webseite existiert. Wenn es existiert, möchte ich den InnerText von def
Klasse erhalten.
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
}
}
Sie können versuchen, SelectSingleNode()
und überprüfen, ob der Rückgabewert nicht null
:
if(doc.DocumentNode.SelectSingleNode("//span[@class='sym_first']") != null)
{
//get inner text
}
oder wenn Sie die Klasse sym_first
innerhalb der aktuellen li
überprüfen sym_first
(vorausgesetzt, dass Sie li
im betreffenden Code-Snippet durchlaufen):
if(node.SelectSingleNode("span[@class='sym_first']") != null)
{
//get inner text
}
UPDATE:
Als Reaktion auf den Fehler, der im Kommentar unten gemeldet wurde, versuchen Sie, zu überprüfen, ob auch eine def
Klasse existiert:
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
}
Abhängig von den Anforderungen möchten Sie möglicherweise nur über li
Elemente mit diesem spezifischen Inhalt iterieren:
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
}