使用C#获取HTML文档中文本的标签

时间:2012-04-04 19:44:30

标签: c# html html-parsing html-agility-pack

我想在HTML文件中搜索某个字符串,然后提取标签。给出:

<div_outer><div_inner>Happy birthday<div><div>

我想在HTML中搜索“生日快乐”,然后让函数返回某种标记结构:这是最里面的标记,这是该标记之外的标记等等。所以,<div_inner></div>然后<div_outer></div>

有什么想法吗?我在想HTMLAgilityPack,但我无法弄清楚如何去做。

一如既往地谢谢你们。

2 个答案:

答案 0 :(得分:2)

HAP确实是一个很好的地方。

您可以使用OuterHtml的{​​{1}}和Parent属性来获取封闭元素和标记。

答案 1 :(得分:1)

你可以使用xpath。我使用//*[text()='Happy birthday'][1]/ancestor-or-self::*表达式找到第一个(为简单起见)节点,其中文本内容为Happy birthday,然后返回此节点的所有祖先(父节点,祖父节点等)和节点本身:< / p>

var doc = new HtmlDocument();
doc.LoadHtml("<div_outer><div_inner>Happy birthday<div><div>");

var ancestors = doc.DocumentNode
    .SelectNodes("//*[text()='Happy birthday'][1]/ancestor-or-self::*")
    .Reverse()
    .ToList();

似乎返回的节点的顺序是节点在文档中找到的顺序,因此我使用Enumerable.Reverse方法来反转它。

这将返回2个节点:div_innerdiv_outer