请原谅,如果这听起来太简单,在这里问,但由于这是我第一天使用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;返回整个文本(例如,需要选择this,而不是this)。有什么建议吗?
发布于 2013-02-04 07:35:43
可以使用/text()选项直接获取特定标签下的所有文本节点。如果您只需要第一个,则将[1]添加到其中:
page.LoadHtml(text);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]");
string selText = s.InnerText; 发布于 2013-02-04 11:40:41
如果在其子对象之前和之后都有文本,则div可能会有多个文本节点。正如我类似地指出的here,我认为获取节点的所有直接文本内容的最好方法是这样做:
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();https://stackoverflow.com/questions/14677492
复制相似问题