以下代码片段产生一个无效转换异常.
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;
}
我对这种行为感到惊讶,所以我看起来count()函数进入XPATH规范 http://www.w3.org/TR/xpath/#function-count:
count 函数返回参数节点集中的节点数。
到目前为止一切顺利,但是,什么是number?答案在同一个规范中:
数字(浮点数)
显然这已被修复X路径2.0 http://www.w3.org/TR/xquery-operators/#func-count返回 xs:integer 但我仍然对此感到好奇。
有谁知道为什么 W3C 决定使用十进制数count()功能?
这不是小数。在 XPath 1.0 中它是一个 IEEE 双精度浮点数,在 XPath 2.0 中它是一个整数。
XPath 1.0 具有单一数字类型,其原因与 Javascript 相同:在弱动态类型语言中,它具有相当大的意义。此外,在设计 XPath 1.0 时,Javascript 被认为是宿主语言的主要候选者,这就是数据类型与 Javascript 保持一致的原因。
如果您只有一种可用的数字类型,那么这就是 count() 必须返回的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)