ottenere tutti gli ID div in una pagina html utilizzando Html Agility Pack

c# html-agility-pack

Domanda

Come ottengo tutti gli ID div in una pagina html utilizzando Html Agility Pack. Sto cercando di ottenere tutti gli ID e metterli in una raccolta.

<p>
    <div class='myclass1'>
        <div id='f'>
        </div>  
        <div id="myclass2">
            <div id="my"><div id="h"></div><div id="b"></div></div>
        </div>
    </div>
</p>

Codice:

<p>
    <div class='myclass1'>
        <div id='f'>
        </div>  
        <div id="myclass2">
            <div id="my"><div id="h"></div><div id="b"></div></div>
        </div>
    </div>
</p>

Come ottengo la raccolta di tutti gli ID dei divs?

Risposta accettata

Se si desidera solo l'ID, è possibile ottenere una raccolta di tali nodi di attributo id invece di ottenere una raccolta dei nodi elemento div . Per esempio:

List<string> ids = new List<string>();
foreach(XmlNode node in doc.SelectNodes("//div/@id"))
{
    ids.Add(node.InnerText);
}

Questo salterà gli elementi div che non hanno un ID, come l'elemento <div class='myclass1'> nel tuo esempio.

"//div/@id" è una stringa XPath. XPath è una tecnologia che è a portata di mano per imparare se si gestisce molto con XML, o in questo caso, HTML tramite la libreria del pacchetto agility. XPath è uno standard di settore che consente di selezionare i nodi corrispondenti in un documento XML.

  • // indica che si desidera selezionare il nodo seguente come figlio del nodo corrente o di uno qualsiasi dei suoi discendenti. Poiché il nodo corrente è il nodo radice del documento, questo troverà i nodi corrispondenti ovunque nel documento.
  • div è un nome di elemento che vogliamo abbinare. Quindi, in questo caso, stiamo dicendo di trovare tutti gli elementi div qualsiasi punto del documento.
  • / indica che si desidera un nodo figlio. In questo caso l'attributo id è figlio dell'elemento div , quindi prima diciamo che vogliamo l'elemento div , quindi abbiamo bisogno della barra diretta per dire che vogliamo uno dei nodi figlio dell'elemento div .
  • @id significa che vogliamo trovare tutti gli attributi id . Il simbolo @ indica che si tratta di un nome di attributo anziché di un nome di elemento.

Risposta popolare

È possibile ottenere la raccolta di div passando la sintassi xpath

Come questo

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

    htmlDoc.OptionFixNestedTags=true;

    htmlDoc.Load(filePath);

 foreach(HtmlNode div doc.DocumentElement.SelectNodes("//div"))
 {
///.. code here
 }



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é