使用HtmlAgilityPack提取节点自身文本排除子节点InnerText的方法
实现方案
在HtmlAgilityPack中,元素的ChildNodes属性包含了所有直接子节点,你只需要筛选出其中类型为HtmlNodeType.Text的节点拼接内容,即可拿到p节点自身的文本,不会包含span等子元素的内部内容。
完整代码示例
using HtmlAgilityPack; using System.Linq; // 加载HTML内容 string htmlContent = @"<p class=""MyClass""> <span>Value:</span> 12345 </p>"; HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(htmlContent); // 定位到目标p节点 HtmlNode targetP = htmlDoc.DocumentNode.SelectSingleNode("//p[@class='MyClass']"); // 提取p节点自身的文本内容,去除首尾空白 string pOwnText = string.Join("", targetP.ChildNodes .Where(node => node.NodeType == HtmlNodeType.Text) .Select(node => node.InnerText) ).Trim(); // 输出结果:12345 Console.WriteLine(pOwnText);
补充说明
- 如果p节点下有多处分散的直接文本段,该方法会按顺序拼接所有文本,不会遗漏也不会引入子元素内部内容
- 末尾的
Trim()可根据需求决定是否保留,用于清除文本前后的换行、空格等空白字符
内容的提问来源于stack exchange,提问作者AlessandroF
相关产品推荐
相关产品推荐

