节点的内部文本忽略子节点的内部文本
本文关键字:内部 文本 子节点 节点 | 更新日期: 2023-09-27 17:57:11
请原谅我,如果在这里问听起来太简单了,但由于这是我使用 html-agility-pack 的第一天,我无法整理出一种方法来选择节点的内部文本,该文本是节点的直接子节点并忽略子节点的内部文本。
例如
<div id="div1">
<div class="h1"> this needs to be selected
<small> and not this</small>
</div>
</div>
目前我正在尝试这个
HtmlDocument page = new HtmlWeb().Load(url);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']");
string selText = s.innerText;
返回整个文本(例如 - 需要选择这个而不是这个)。有什么建议吗??
如果div
子节点前后有文本,则可能有多个文本节点。 正如我在这里同样指出的那样,我认为获取节点的所有直接文本内容的最佳方法是执行以下操作:
HtmlDocument page = new HtmlWeb().Load(url);
var nodes = page.DocumentNode.SelectNodes("//div[@id='div1']//div[@class='h1']/text()");
StringBuilder sb = new StringBuilder();
foreach(var node in nodes)
{
sb.Append(node.InnerText);
}
string content = sb.ToString();
您可以使用
/text()
选项直接在特定标记下获取所有文本节点。如果只需要第一个,请向其添加[1]
:
page.LoadHtml(text);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]");
string selText = s.InnerText;