我一直在努力解决过去几天我遇到的这个问题。说,我想从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直到包含节点吗?
答案 0 :(得分:3)
而不是:
.//text()
使用强>:
.//*[normalize-space(text())]
这将选择具有至少一个非空白文本节点子节点的上下文(当前)节点的所有“叶元素” - 后代。
答案 1 :(得分:2)
你为什么不
string[] elements = getXPath(textNode).Split(new char[1] { '/' });
return String.Join("/", elements, 0, elements.Length-2);