首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点的内部文本忽略子节点的内部文本

节点的内部文本忽略子节点的内部文本
EN

Stack Overflow用户
提问于 2013-02-04 05:26:29
回答 2查看 2.9K关注 0票数 3

请原谅,如果这听起来太简单,在这里问,但由于这是我第一天使用html-agility-pack,我无法整理出一种方法来选择节点的内部文本,这是节点的直接子节点,并忽略了子节点的内部文本。

例如

代码语言:javascript
复制
<div id="div1">
   <div class="h1"> this needs to be selected
   <small> and not this</small>
   </div>
</div>

目前我正在尝试这个

代码语言:javascript
复制
HtmlDocument page = new HtmlWeb().Load(url);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']");
string selText = s.innerText;

返回整个文本(例如,需要选择this,而不是this)。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-04 07:35:43

可以使用/text()选项直接获取特定标签下的所有文本节点。如果您只需要第一个,则将[1]添加到其中:

代码语言:javascript
复制
page.LoadHtml(text);
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]");
string selText = s.InnerText; 
票数 2
EN

Stack Overflow用户

发布于 2013-02-04 11:40:41

如果在其子对象之前和之后都有文本,则div可能会有多个文本节点。正如我类似地指出的here,我认为获取节点的所有直接文本内容的最好方法是这样做:

代码语言:javascript
复制
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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14677492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档