¿Extraer contenido con XPath?

c# dom html-agility-pack xml xpath

Pregunta

Tengo contenido html que estoy almacenando como un documento XML (usando HTML Agility Pack). Sé algo de XPath, pero no puedo hacer cero el contenido exacto que necesito.

En mi ejemplo a continuación, estoy tratando de extraer el texto "src" y "alt" de la imagen grande. Este es mi ejemplo:

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

¿Cuál es el XPath para obtener "images / KC0763_l.jpg" y "Circles t-shirt - Navy"? Esto es lo lejos que he llegado pero está mal. Principalmente pseudo código en este 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>

Cualquier ayuda para obtener este derecho sería muy apreciada.

Respuesta aceptada

La siguiente xpath te llevará a los atributos src para las etiquetas img:

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

Y similarmente esto te llevará a los atributos alt:

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

Desde allí se puede acceder al texto del atributo. Si solo quieres encontrar los que coincidan con 'large_image_display', lo filtrarías así:

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

Respuesta popular

Usa las siguientes expresiones XPath :

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

y

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

Intente siempre evitar el uso de la // abreviatura , ya que puede resultar en una evaluación muy ineficiente (hace que se escanee todo el (sub) árbol).

En este caso particular, sabemos que el elemento html es el elemento superior del documento y simplemente podemos seleccionarlo mediante /html , no //html .

Su principal problema fue que en sus expresiones estaba usando \ y \\ y no hay tales operadores en XPath. Los operadores XPath correctos que intentaba utilizar son / y la abreviatura // .




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué