HtmlAgilityPack仅选择内部文本节点

时间:2016-06-17 06:48:14

标签: c# html linq

这是我更大的html文件的示例html输入部分。

string html = "<html> <p>Ingredients:</p> </html>";

我想只检索内部文字成分的节点。  成分可能会出现在html节点p,div,strong等中。

使用HtmlAgility包和linq实现此目的的c#代码是

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

List<HtmlNode> ingredientList = doc.DocumentNode.Descendants().Where
                        (x => x.InnerText.Contains("Ingredients:")).ToList();

此代码的结果为我提供了3个节点

<html> node
<p> node
#text node

我只想要检索

<p> node

1 个答案:

答案 0 :(得分:0)

如果您的平台支持XPath,即HtmlAgilityPack的SelectNodes()方法,则可以使用XPath表达式获取其直接子文本节点之一包含关键字的元素:

List<HtmlNode> ingredientList = doc.DocumentNode
                                   .SelectNodes("//*[text()[contains(.,'Ingredients:')]]")
                                   .ToList();