使用HttpAgilityPack从<p>获取文本

时间:2015-07-08 04:20:45

标签: html asp.net-mvc-4 html-agility-pack

我使用此代码从html“P”标签

返回文本
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(content);
string query = doc.DocumentNode.SelectSingleNode("//p/text()").InnerText;
            if (query.Length >0)
            {
                query = query.Substring(0, 60) + "...";
            }

&GT; 这里的问题是,如果“P”标签包含另一个标签,则不会返回文本。对于前。

<p><img src="http://localhost:49171/Images/MyImages/80ef7d03-6a8b-49e2-a4da-fa9f5f1773dd.jpg" alt="" />Thank you for choosing Microsoft Windows 8.1 Pro. This is a license agreement between you and Microsoft Corporation (or, based on where you live, one of its affiliates) </p>

在我的代码中,查询返回“Images / MyImages / 80ef7d03-6a8b-49e2-a4da-fa9f5f1773dd.jpg”,

任何人都可以帮我回复一下“感谢您选择Microsoft Windows 8.1 Pro”。    而不是“Images / MyImages / 80ef7d03-6a8b-49e2-a4da-fa9f5f1773dd.jpg”。

提前致谢...

1 个答案:

答案 0 :(得分:0)

由于HtmlAgilityPack中的每个文本节点都具有名称#text,因此您可以执行以下操作:

string query = doc.DocumentNode.Descendants("p")
    .First()
    .ChildNodes.First(node => node.Name == "#text").InnerText;

这将获取文档中的第一个<p>节点,并选择第一个文本节点的内部文本,该文本节点是<p>节点的直接子节点。