以下代码片段产生一个 InvalidCastException。
static int XPathCount()
{
var doc = new XmlDocument();
doc.LoadXml(
@"<root>
<item>value1</item>
<item>value2</item>
<item>value3</item>
</root>");
var navigator = doc.CreateNavigator();
var expression = navigator.Compile("count(//item)");
var count = navigator.Evaluate(expression);
return (int) count;
}
我对这种行为感到惊讶,所以我查看了 XPATH specification 中的 count() 函数:
The count function returns the number of nodes in the argument node-set.
到目前为止还不错,但是数字是什么?答案在同一个规范中:
number (a floating-point number)
显然这已在 XPATH 2.0 中修复返回一个 xs:integer 但我仍然对此感到好奇。
有谁知道为什么 W3C 决定为 count() 函数使用十进制数?
最佳答案
这不是小数。在 XPath 1.0 中它是一个 IEEE double float ,在 XPath 2.0 中它是一个整数。
出于与 Javascript 相同的原因,XPath 1.0 具有单一数字类型:在弱动态类型语言中,它非常有意义。此外,在设计 XPath 1.0 时,Javascript 被认为是宿主语言的主要候选者,这就是数据类型与 Javascript 保持一致的原因。
如果您只有一种数字类型可用,那么这就是 count() 必须返回的类型。
关于c# - 为什么 XPATH count 函数返回一个 double 而不是 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17960497/