Ottieni i valori dei tag htm con HtmlAgilityPack

c# css html html-agility-pack

Domanda

Ho un sacco di codice Html con il seguente stile, ho bisogno di valori di

  1. Valore dell'attributo src per img
  2. Valore della data
  3. Valore dell'attributo source per la seconda immagine
  4. Dettagli

che ho specificato questi numeri in un codice.

Infine voglio mettere tutti questi valori in un file XML. Quindi potresti aiutarmi per quanto riguarda come ottenere questi valori con HtmlAgilityPack?

Grazie in anticipo.

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

Risposta accettata

Se l'HTML è come hai inserito la tua domanda, puoi usare XPath per recuperare i risultati nel modo seguente ordinato:

Con un codice precedente come questo, ad esempio per testare con il tuo 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. Per la prima immagine ad esempio qualcosa del genere:

    var value = doc.DocumentNode.SelectSingleNode("//div[@class='logo']/img").Attributes["src"].Value;
    
  2. Per il secondo qualcosa di simile:

    var value = doc.DocumentNode.SelectSingleNode("//p[@class='date']").InnerText;
    
  3. Per il terzo:

    var value = doc.DocumentNode.SelectSingleNode("//div[@class='details']/p[2]/img").Attributes["src"].Value;
    
  4. E per i quattro:

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

Spero che questo ti sia d'aiuto.



Related

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é