【问题标题】:Creating a map in XQuery在 XQuery 中创建地图
【发布时间】:2015-11-30 17:50:24
【问题描述】:

我正在尝试在 xquery 中创建类似结构的哈希映射/键值对。我知道 xquery 中存在类似地图的结构:http://www.w3.org/2005/xpath-functions/map/

甚至在撒克逊找到了文档:http://www.saxonica.com/html/documentation/functions/map/

但是我都不确定如何创建或使用地图。

到目前为止,这是我的代码:

declare namespace map="http://www.w3.org/2005/xpath-functions/map";
let $a := map:map()

但我得到一个错误:

Cannot find a matching 1-argument function named
  {http://www.w3.org/2005/xpath-functions/map}map()

那么我究竟如何在 xquery 中使用地图呢?

【问题讨论】:

    标签: xml xquery saxon xquery-3.0


    【解决方案1】:

    语法在 XSLT 3.0 和 XQuery 3.1 中,随着工作草案的发展,已经经历了几次迭代。当前的语法(在 Saxon 9.7 中支持)允许

    map{}
    

    空地图

    map{'a':1, 'b':2}
    

    对于具有已知条目数的映射(键和值都可以是任意表达式),并且

    map:merge(for $x in //emp return map{$x!name : $x!@salary})
    

    对于具有静态未知数量的条目的地图。

    【讨论】:

    • 这似乎在正确的轨道上,但现在我收到以下错误:To use XPath 3.1 syntax, you must configure the XPath parser to handle it。我该怎么做
    • 取决于您使用的界面:命令行? s9api API? XQJ?
    • 我想我解决了这个问题,但它是什么意思:$x!name : $x!@salary 部分意思。我从未见过这种带有“!”的语法。这是什么意思?
    • “!”运算符是 XPath 3.0 中的新功能。 A!B 的含义与for $a in A return B 大致相同,除了 B 是用 $a 作为上下文项进行评估的。所以另一种思考方式是它与 A/B 相同,只是 A 不必仅由节点组成,并且没有按文档顺序排序。我已经养成了在这种情况下使用它的习惯,“/”也可以。
    猜你喜欢
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多