recupero del valore di span dal documento html

.net c# html-agility-pack

Domanda

Ho seguito xpath recuperato usando il plugin firefox xpath

id('some_id')/x:ul/x:li[4]/x:span

usando il pacchetto agility html sono in grado di recuperare id('some_id')/x:ul/x:li[4]

htmlDoc.DocumentNode.SelectNodes(@"//div[@id='some_id']/ul/li[4]").FirstOrDefault();

ma non so come ottenere questo valore di span.

aggiornare

 <div id="some_id">
    <ul>
      <li><li>
      <li><li>
      <li><li>
      <li>
         Some text
        <span>text I want to grab</span>
      </li>
    </ul>
    </div>

Risposta accettata

Un approccio alternativo (senza html-agility-pack) sarebbe quello di utilizzare LINQ2XML . Puoi usare il metodo XDocument.Descendants per prendere l'elemento span e prenderne il valore:

var xml = @" <div id=""some_id"">
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li>
     Some text
    <span>text I want to grab</span>
  </li>
</ul>
</div>";
var doc = XDocument.Parse(xml);
Console.WriteLine(doc.Root.Descendants("span").FirstOrDefault().Value);

Il codice può essere esteso per verificare se l'elemento div ha l'id corrispondente, utilizzando la proprietà XElement.Attribute :

var doc = XDocument.Parse(xml);
Console.WriteLine(doc.Elements("div").Where (e => e.Attribute("id").Value == "some_id").Descendants("span").FirstOrDefault().Value);

Uno svantaggio di questa soluzione è che la struttura XML (HTML, XHTML) deve essere chiusa correttamente altrimenti l'analisi avrà esito negativo.


Risposta popolare

Non hai bisogno di analizzare HTML con LINQ2XML, HTMLAgilityPack è per questo ed è più facile ottenere il nodo nel seguente modo:

var html = @" <div id=""some_id"">
  <ul>
    <li></li>
    <li></li>
    <li></li>
    <li>
      Some text
      <span>text I want to grab</span>
    </li>
  </ul>
</div>";

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var value = doc.DocumentNode.SelectSingleNode("div[@id='some_id']/ul/li/span").InnerText;    
Console.WriteLine(value);


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é