Inhalt mit XPath extrahieren?

c# dom html-agility-pack xml xpath

Frage

Ich habe HTML-Inhalt, den ich als XML-Dokument speichern (mit HTML Agility Pack). Ich kenne einige XPath, aber ich bin nicht in der Lage, den genauen Inhalt auf Null zu setzen.

In meinem Beispiel unten versuche ich, den Text "src" und "alt" aus dem großen Bild zu extrahieren. Das ist mein Beispiel:

<html>
<body>
   ....
   <div id="large_image_display">
      <img class="photo" src="images/KC0763_l.jpg" alt="Circles t-shirt - Navy" />
   </div>
   ....
   <div id="small_image_display">
      <img class="photo" src="images/KC0763_s.jpg" alt="Circles t-shirt - Navy" />
   </div>
</body>
</html>

Was ist der XPath, um "images / KC0763_l.jpg" und "Circles t-shirt - Navy" zu erhalten? Das ist wie weit ich gekommen bin, aber es ist falsch. Meistens Pseudo-Code an dieser Stelle:

\\div[@class='large_image_display']\img[1][@class='photo']@src
\\div[@class='large_image_display']\img[1][@class='photo']@alt

Jede Hilfe, um dies zu erreichen, wäre sehr willkommen.

Akzeptierte Antwort

Der folgende xpath bringt Sie zu den src-Attributen für die img-Tags:

'//html/body/div/img[@class="photo"]/@src'

Und ähnlich werden Sie dadurch zu den alt-Attributen kommen:

'//html/body/div/img[@class="photo"]/@alt'

Von dort gelangen Sie zum Attributtext. Wenn Sie nur diejenigen finden möchten, die 'large_image_display' entsprechen, dann würden Sie es weiter so filtern:

'//html/body/div[@id="large_image_display"]/img[@class="photo"]/@src'    

Beliebte Antwort

Verwenden Sie die folgenden XPath-Ausdrücke :

/html/body/div[@id='large_image_display']/img/@src

und

/html/body/div[@id='large_image_display']/img/@alt

Versuchen Sie immer, die Abkürzung // zu vermeiden , da dies zu einer sehr ineffizienten Auswertung führen kann (bewirkt, dass der gesamte (Teil-) Baum gescannt wird).

In diesem speziellen Fall wissen wir, dass das html Element das oberste Element des Dokuments ist, und wir können es einfach mit /html - nicht //html auswählen.

Ihr Hauptproblem bestand darin, dass Sie in Ihren Ausdrücken \ und \\ und in XPath keine solchen Operatoren vorhanden sind. Die richtigen XPath Operatoren , die Sie versuchen , zu verwenden sind / und die // Abkürzung.



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