C # HtmlAgilityPack fügt tbody hinzu

c# html html-agility-pack xpath

Frage

Das C # HtmlAgilityPack fügt nach der LoadHtml-Funktion das tbody-Element in die DOM-Struktur in Tabellen ein, auch wenn es im ursprünglichen HTML-Dokument nicht vorhanden ist. Wie kann ich das deaktivieren?

Mein Algorithmus erstellt einige XPATH-Ausdrücke, indem er den Dom-Baum durchläuft und das nicht vorhandene tbody-Element im Originaldokument dazu führt, dass die SelectNodes die gewünschten Elemente nicht finden. Ich habe viel Zeit gebraucht, um das herauszufinden: |

Ist es möglich, dass SelectNodes auch Knoten berücksichtigt, die von HtmlAgilityPack hinzugefügt wurden?

Beispiel:

<table>
    <tr><td>data</td></tr>
</table>

Meine Anwendung würde diesen XPATH erzeugen, um 'Daten' zu extrahieren: // table / tbody / tr / td

Das tbody-Tag im Ausdruck wurde hinzugefügt, weil es in der DOM-Struktur nach dem Parsen des HTML-Codes durch HtmlAgilityPack hinzugefügt wurde, weil HtmlAgilityPack es hinzugefügt hat, auch wenn es nicht existiert. Deswegen

doc.DocumentNode.SelectNodes("//table/tbody/tr/td");

würde versagen.

Mit anderen Worten, das übergeordnete Tag-Element tr (HtmlElement) entspricht "TBODY" und nicht "TABLE". Auch ich analysiere viele verschiedene Websites, also ist dies eine Situation.

SelectNodes sucht im ursprünglichen HTML-Code, nicht nach der DOM-Struktur, die es nach HtmlDocument.LoadHtml hat, oder es berücksichtigt keine "virtuellen" Elemente, die von ihm hinzugefügt werden.

Beliebte Antwort

Sie müssen nicht die vollständige Hierarchie verwenden.

Verwenden Sie einfach Folgendes, wenn Sie nur die td s möchten:

doc.DocumentNode.SelectNodes("//table//td");

oder ignoriere einfach den tbody Knoten und erhalte alle Hierarchie, die dir tbody :

doc.DocumentNode.SelectNodes("//table//tr/td");



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum