【问题标题】:Why did the definition of dot (.) change between XPath 1.0 and 2.0?为什么点 (.) 的定义在 XPath 1.0 和 2.0 之间发生了变化?
【发布时间】:2016-09-02 19:57:30
【问题描述】:

在 Stack Overflow 上研究 XPath 问题答案的详细信息时,我遇到了 XPath 1.0 和 2.0 之间的差异,我找不到任何理由。

我试图理解. 的真正含义。

改变的理由是什么? 在 XPath 2.0 中 .self::node() 有区别吗?

从规范本身来看,我并不清楚更改的意图。我尝试用谷歌搜索关键字,如点或句点、主要表达方式和基本原理。

【问题讨论】:

    标签: xpath language-lawyer xpath-2.0


    【解决方案1】:

    XPath 1.0 有四种数据类型:字符串、数字、布尔值和节点集。除了节点之外,没有办法处理值的集合。这意味着,例如,无法对派生值求和(如果元素具有price='$23.95' 形式的属性,则无法对通过剥离 $ 符号获得的数字求和,因为这种剥离的结果将是一组数字,并且没有这样的数据类型)。

    所以 XPath 2.0 引入了更通用的序列,这意味着操作序列的工具必须通用化;例如,如果 $X 是一个数字序列,则 $X[. > 0] 过滤该序列以仅包含正数。但这仅适用于“。”既可以指数字,也可以指节点。

    【讨论】:

      【解决方案2】:

      简而言之:self::node() 会过滤掉原子项目,而 . 不会。 原子项目(数字、字符串和许多其他 XML Schema 类型)不是节点(与元素、属性不同) 、cmets 等)。

      考虑规范中的示例:(1 to 100)[. mod 5 eq 0]。如果.self::node() 替换,则表达式不是有效的XPath,因为mod 要求两个参数都是数字,而原子化在这种情况下没有帮助。

      对于那些扫描规范的人:XPath 2.0 定义了item() 类型匹配结构,但它与node tests 无关,因为原子不是节点,轴步骤总是只返回节点。因此,点不能定义为self::item()。它确实需要一种特殊的语言结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 2011-02-23
        • 1970-01-01
        • 2018-12-24
        • 2022-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多