C# 节点的内部文本忽略子节点的内部文本
请原谅,如果这里的问题听起来太简单,但由于这是我使用html agility pack的第一天,我无法找到一种方法来选择节点的内部文本,它是节点的直接子节点,而忽略子节点的内部文本 比如说C# 节点的内部文本忽略子节点的内部文本,c#,xpath,html-agility-pack,C#,Xpath,Html Agility Pack,请原谅,如果这里的问题听起来太简单,但由于这是我使用html agility pack的第一天,我无法找到一种方法来选择节点的内部文本,它是节点的直接子节点,而忽略子节点的内部文本 比如说 <div id="div1"> <div class="h1"> this needs to be selected <small> and not this</small> </div> </div> 返回整个文本(
<div id="div1">
<div class="h1"> this needs to be selected
<small> and not this</small>
</div>
</div>
返回整个文本(例如,需要选择此项,而不是此项)。
任何建议???您可以使用
/text()
选项直接获取特定标记下的所有文本节点。如果您只需要第一个,请向其中添加[1]
:
page.LoadHtml(text);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]");
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();
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();