节点内部文本和第一个子节点文本的文本
text of node's inner text and first child nodes text
我在页面结构中有多个链接是这样的:
<a ....>
<b>Text I Need</b>
Also Text I need
</a>
我想从上面的代码中提取字符串 "Text I NeedAlso Text I need"
我成功提取了第二部分,但我也不确定如何 select b 标签内的文本,目前我正在使用这个:
var link_list = doc.DocumentNode.SelectNodes(@"/a/text()");
foreach (var link in link_list)
{
Console.WriteLine(link.InnerText);
}
我是否应该获取 a 的 html 而不是文本,然后使用正则表达式删除标签并提取文本,或者是否有其他方法?
访问 <a>
的 InnerText
属性 应该会立即为您提供所有文本节点:
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)));
}
输出:
Text I Need
Also Text I need
我在页面结构中有多个链接是这样的:
<a ....>
<b>Text I Need</b>
Also Text I need
</a>
我想从上面的代码中提取字符串 "Text I NeedAlso Text I need" 我成功提取了第二部分,但我也不确定如何 select b 标签内的文本,目前我正在使用这个:
var link_list = doc.DocumentNode.SelectNodes(@"/a/text()");
foreach (var link in link_list)
{
Console.WriteLine(link.InnerText);
}
我是否应该获取 a 的 html 而不是文本,然后使用正则表达式删除标签并提取文本,或者是否有其他方法?
访问 <a>
的 InnerText
属性 应该会立即为您提供所有文本节点:
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)));
}
输出:
Text I Need
Also Text I need