Récupération de la valeur span d'un document HTML

.net c# html-agility-pack

Question

J'ai suivi xpath avec le plugin firefox xpath

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

en utilisant le pack d'agilité html, je peux récupérer l' id('some_id')/x:ul/x:li[4]

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

mais je ne sais pas comment obtenir cette valeur span.

mettre à jour

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

Réponse acceptée

Une autre approche (sans html-agility-pack) serait d'utiliser LINQ2XML . Vous pouvez utiliser la méthode XDocument.Descendants pour prendre l'élément span et prendre sa valeur:

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

Le code peut être étendu pour vérifier si l'élément div a l'ID correspondant, à l'aide de la propriété XElement.Attribute :

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

Un inconvénient de cette solution est que la structure XML (HTML, XHTML) doit être correctement fermée sinon l’analyse échouera.


Réponse populaire

Vous n'avez pas besoin d'analyser HTML avec LINQ2XML, HTMLAgilityPack c'est pour cela et il est plus facile d'obtenir le noeud de la manière suivante:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi