选择包含XPath文本的所有节点

时间:2013-03-19 22:46:33

标签: 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直到包含节点吗?

2 个答案:

答案 0 :(得分:3)

而不是

.//text() 

使用

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

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

答案 1 :(得分:2)

你为什么不

string[] elements = getXPath(textNode).Split(new char[1] { '/' });
return String.Join("/", elements, 0, elements.Length-2);