Obtenga valores de etiquetas htm con HtmlAgilityPack

c# css html html-agility-pack

Pregunta

Tengo un montón de código de bloque Html con el siguiente estilo, necesito valores de

  1. Valor del atributo src para img
  2. Valor de fecha
  3. Valor del atributo fuente para segundo img
  4. Detalles

que he especificado estos números en un código.

Finalmente quiero poner todos estos valores en un archivo XML. Entonces, ¿podría ayudarme con respecto a cómo podría obtener estos valores con HtmlAgilityPack?

Gracias por adelantado.

<div class="promotion"> 
 <div class="logo">
       <img src='http://www.example.com/D.jpg' **(1)**>         
 </div>
 <div class="details">
    <p class="date"> 2015/12/12 **(2)** </p>
    <p> 
       <img src="http://www.example.com/DDD.jpg" **(3)** alt="" />
       <h3> Some Details **(4)** </h3>
    </p> 
 </div>
</div>

Respuesta aceptada

Si su HTML es como lo puso en su pregunta, puede usar XPath para recuperar sus resultados de la siguiente manera ordenada:

Con un código anterior como este, por ejemplo para probar con su HTML:

var html = @"<div class='promotion'> 
                     <div class='logo'>
                           <img src='http://www.example.com/D.jpg' **(1)**>         
                     </div>
                     <div class='details'>
                        <p class='date'> 2015/12/12 **(2)** </p>
                        <p> 
                           <img src='http://www.example.com/DDD.jpg' **(3)** alt='' />
                           <h3> Some Details **(4)** </h3>
                        </p> 
                     </div>
                    </div>";

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
  1. Para la primera imagen por ejemplo algo como esto:

    var value = doc.DocumentNode.SelectSingleNode("//div[@class='logo']/img").Attributes["src"].Value;
    
  2. Por el segundo algo como esto:

    var value = doc.DocumentNode.SelectSingleNode("//p[@class='date']").InnerText;
    
  3. Para el tercero:

    var value = doc.DocumentNode.SelectSingleNode("//div[@class='details']/p[2]/img").Attributes["src"].Value;
    
  4. Y para los cuatro:

    var value = doc.DocumentNode.SelectSingleNode("//div[@class='details']/p[2]/h3").InnerText;
    

Espero que esto te ayude.



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é