我知道这是一个奇怪的问题!
该要求是由于现有代码要求XPath查询的结果是单个节点。遗憾的是,由于我们无法控制的因素,我们目前无法更改代码(除非不存在解决方法,这可能意味着我们必须延迟发布)。
在我的例子中,XPath当前返回一个整数值(count):
count(/someNode/node)
代码使用XPathNavigator.SelectSingleNode()
方法,当然,该方法失败,因为结果不是节点。
相反,我需要XPath来返回一个节点,尽管是一个假节点。可能吗?请注意,因为使用了.NET,所以XPath必须是1.0(而不是2.0)。
P.S。并且,是的,我们将尽快重构有问题的代码!
答案 0 :(得分:2)
XPath选择输入文档中的节点,它不能创建新节点或“假”节点,所以我想如果你想评估表达式count(/someNode/node)
,你需要使用Evaluate
方法{ {3}}而非SelectSingleNode
。
答案 1 :(得分:2)
如果您需要XPath表达式来返回其文本内容等于count(/someNode/node)
的值的节点,您可以这样做:
"(//text() | //*/@*)[. = count(/someNode/node)]"
这可能非常低效,取决于您的输入文档是什么样的;如果输入文档中没有包含正确数字的文本节点,它可能会失败。但是在某些情况下它可以解决问题,并可能帮助您避免延迟释放。
例如,如果您的输入XML很小,并且count(...)
的可能值范围有限,并且您能够对XML进行更改,那么您可以包含额外的文本或属性节点在您的输入XML中,以确保所需的数字可用。