Selezione dei nodi all'interno di HtmlNodeCollection con HTML Agility Pack

c# html-agility-pack linq xmlnode xml-parsing

Domanda

Ho una struttura html del genere:

<div class="class1">
    <div class="class2">
        <a href="test" title="professional and enthusiast programmers">Stack Overflow</a>
    </div>
    <div class="class2">
    </div>
    <div class="class2">
    </div>
    <div class="class2">
    </div>
</div>
<div class="class1">
    <div class="class2">
        <a href="test" title="professional and enthusiast programmers">Stack Overflow</a>
    </div>
</div>

Sto provando a selezionare tutti i nodi con class1:

HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//*[contains(@class,' class1 ')]");

E seleziona tutti i nodi all'interno di quel nodo che contiene class2:

foreach (HtmlNode node in nodes)
{
   HtmlNodeCollection nodes2 = node.SelectNodes("//*[contains(@class,' class2 ')]");
}

Ma i nodi 2 ottengono la classe 2 da tutti i nodi. Che cosa sto facendo di sbagliato?

Risposta accettata

var nodes = doc.DocumentNode.SelectNodes("//div[@class='class1']");

var nodes2 = nodes.Select(c1 => c1.SelectNodes("div[@class='class2']"));

Risposta popolare

XPath alternativo ha funzionato per me

var nodes = doc.DocumentNode.SelectNodes("//div[@class='class1']");
var nodes2 = nodes.Select(c1 => c1.SelectNodes(".//div[@class='class2']"));


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é