节点的内部文本和第一个子节点文本的文本

时间:2015-06-25 14:33:08

标签: c# html-agility-pack

我在结构页面中有多个链接:

<a ....>
    <b>Text I Need</b>
    Also Text I need
</a>

我想从上面的代码中提取字符串“Text I NeedAlso Text I I need” 我成功提取了第二部分,但我不确定如何选择b标签内的文本,目前我正在使用它:

var link_list = doc.DocumentNode.SelectNodes(@"/a/text()");
foreach (var link in link_list)
{
   Console.WriteLine(link.InnerText);
}

我是否可能反而得到不是文本而是html和删除带有正则表达式的标签然后提取文本,还是有其他方法?

1 个答案:

答案 0 :(得分:1)

访问InnerText的{​​{1}}属性应该会立即为您提供所有文本节点:

<a>

或者如果您确实只需要获得直接子文本节点和大子文本节点,请尝试以下方式:

var html = @"<a ....>
    <b>Text I Need</b>
    Also Text I need
</a>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var link_list = doc.DocumentNode.SelectNodes("/a");
foreach (var link in link_list)
{
    Console.WriteLine(link.InnerText);
}

输出

var link_list = doc.DocumentNode.SelectNodes("/a");
foreach (var link in link_list)
{
    var texts = link.SelectNodes("text() | */text()");
    Console.WriteLine(String.Join("", texts.Select(o => o.InnerText)));
}