Estrai il contenuto con XPath?

c# dom html-agility-pack xml xpath

Domanda

Dispongo di contenuto HTML che sto archiviando come documento XML (utilizzando HTML Agility Pack). Conosco un XPath, ma non sono in grado di azzerare il contenuto esatto di cui ho bisogno.

Nel mio esempio qui sotto, sto cercando di estrarre il testo "src" e "alt" dall'immagine grande. Questo è il mio esempio:

<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>

Che cos'è XPath per ottenere "images / KC0763_l.jpg" e "T-shirt cerchi - Navy"? Questo è quanto ho ottenuto ma è sbagliato. Principalmente codice pseudo a questo punto:

<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>

Qualsiasi aiuto per ottenere questo diritto sarebbe molto apprezzato.

Risposta accettata

Il seguente xpath ti porterà agli attributi src per i tag img:

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

E allo stesso modo questo ti porterà agli attributi alt:

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

Da lì puoi accedere al testo dell'attributo. Se vuoi trovare solo quelli che corrispondono a 'large_image_display', allora lo filtreresti ulteriormente come segue:

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

Risposta popolare

Usa le seguenti espressioni XPath :

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

e

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

Cerca sempre di evitare l'uso dell'abbreviazione // , perché può causare una valutazione molto inefficiente (causa la scansione dell'intero albero (sotto)).

In questo caso particolare, sappiamo che l'elemento html è l'elemento principale del documento e possiamo semplicemente selezionarlo da /html - not //html .

Il tuo problema principale era che nelle tue espressioni stavi usando \ e \\ e non ci sono operatori simili in XPath. Gli operatori XPath corretti che stavi tentando di utilizzare sono / e // abbreviazione.




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é