c# - 使用 XPath 选择包含文本的所有节点

标签 c# xpath html-agility-pack

过去几天我一直在努力解决这个问题。比如说,我想从一个 HTML 文档中获取所有的 text(),但是我只想知道并检索包含文本数据的节点的 XPath。示例:

 foreach (var textNode in node.SelectNodes(".//text()")) 
 //do stuff here 

但是,在使用 textNode.XPath 检索 textNode 的 XPath 时,我得到了包括 #text 节点的完整 XPath:

/html[1]/body[1]/div[1]/a[1]/#text

但我只想要文本的包含节点,例如:

/html[1]/body[1]/div[1]/a[1]

谁能给我指出一个更好的 XPath 解决方案来检索包含文本的所有节点,但只检索包含节点之前的 XPath?

最佳答案

代替:

.//text() 

使用:

.//*[normalize-space(text())]

这将选择上下文(当前)节点的所有“叶元素”后代,这些节点至少有一个非空白文本节点子节点。

关于c# - 使用 XPath 选择包含文本的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15511992/

相关文章:

c# - CheckedListBox 控件中的 WordWrap

c# - LINQ to Entities 仅支持转换实体数据模型基元类型?

select - 如何使用xpath按列标题名称选择表格列

C# HtmlAgilityPack 内部 html 在附加节点后不改变

visual-studio-2010 - “HtmlAgilityPack”已具有为 'System.Net.Http' 定义的依赖项

c# - SQL记录条目,不同的测试用例

c# - 为什么 List<double> 类型会以这种方式表现?

selenium - 计算与给定xpath表达式匹配的元素数

java - 如何在jxpath中使用text()

c# - 尝试解析 html 以进行 pdf 转换时出现 ItextSharp 错误