1

我知道这是一个奇怪的问题!

该要求是由于现有代码期望 XPath 查询的结果是单个节点。不幸的是,由于我们无法控制的因素,我们目前无法更改代码(除非不存在解决方法,这可能意味着我们将不得不推迟发布)。

就我而言,XPath 当前返回一个整数值(计数):

count(/someNode/node)

代码使用XPathNavigator.SelectSingleNode()方法,当然,因为结果不是节点而失败。

相反,我需要 XPath 来返回一个节点,尽管它是一个假的。是否可以?请注意,因为使用了 .NET,所以 XPath 必须是 1.0(而不是 2.0)。

PS 而且,是的,我们会尽快研究重构有问题的代码!

4

2 回答 2

2

XPath 在输入文档中选择节点,它不能创建新节点或“假”节点,所以我认为如果你想评估count(/someNode/node)你需要使用Evaluate方法http://msdn.microsoft.com/en-us/的表达式library/2c16b7x8.aspx而不是SelectSingleNode.

于 2012-10-01T16:45:05.370 回答
2

如果您需要 XPath 表达式返回其文本内容等于 的值的节点count(/someNode/node),您可以这样做:

"(//text() | //*/@*)[. = count(/someNode/node)]"

这可能非常低效,具体取决于您的输入文档是什么样的;如果输入文档中没有包含正确数字的文本节点,它很可能会失败。但是在某些情况下,它可以解决问题,并且可以帮助您避免延迟发布。

For example, if your input XML is small, and the range of possible values for the count(...) is limited, and if you are able to make changes to the XML, then you could include extra text or attribute nodes in your input XML to make sure the needed numbers are available.

于 2012-10-02T18:36:09.950 回答