c# - 为什么 XPATH count 函数返回一个 double 而不是 int?

标签 c# xpath

以下代码片段产生一个 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/

相关文章:

python - 在添加到字典之前清除 unicode

c# - 使用 Protobuf-net 序列化对象列表

c# - 在 C# 中为大文件创建校验和的最快方法是什么

c# - 比较位图列表中图像的最佳方法是什么

xml - XPath 表达式不返回任何结果

html - 包含 2 个或更多 "OR"条件的 XPath 不起作用?

c# - 在我看来,什么时候应该从数据库中查询,ASP.NET MVC

C# - 是否可以(以及如何)使用 SgmlReader 执行 XSL 转换

r - 使用rentrez在R中解析XML文件

c# - Xpath“在前”检查以查找值