从html文档中获取跨度值

.net c# html-agility-pack

我使用firefox xpath插件跟踪了xpath

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

使用html敏捷包我能够获取id('some_id')/x:ul/x:li[4]

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

但我不知道如何获得这个跨度值。

更新

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

一般承认的答案

另一种方法(没有html-agility-pack)将使用LINQ2XML 。您可以使用XDocument.Descendants方法获取span元素并获取其值:

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

可以使用XElement.Attribute属性扩展代码以检查div元素是否具有匹配的id:

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

此解决方案的一个缺点是需要正确关闭XML结构(HTML,XHTML),否则解析将失败。


热门答案

您不需要使用LINQ2XML解析HTML,HTMLAgilityPack也适用于它,并且通过以下方式获取节点更加容易:

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因