gpt4 book ai didi

未设置 Xquery 变量

转载 作者:行者123 更新时间:2023-12-01 12:05:27 24 4
gpt4 key购买 nike

在我的 Xquery 3.1 模块中,我通过模块导入导入了我的“全局变量”,其中一个 ($globalvar:MSGS) 包含一个 XML 文档,我通常可以通过引用访问它到变量。比如这个

$globalvar:MSGS//vocab[@xml:id="warning"]

会回来

     <vocab xml:id="warning">
<span lang="en">Warning! Your changes (OBJECTID) could not be saved!</span>
<span lang="fr">Attention, vos modifications (OBJECTID) n’ont pas pu être sauvegardées !</span>
</vocab>

但下面返回错误 err:XPDY0002 variable '$msg' is not set pointing to line 7-8:

1. let $collid := $mydoc//collection-id/text()
2. let $errtitle :=
3. <msg-error-title>
4. {
5. let $msg := $globalvar:MSGS/id("warning")/span
6. return
7. <en>{replace($msg[@lang="en"]/text(),"OBJECTID",$collid)}</en>,
8. <fr>{replace($msg[@lang="fr"]/text(),"OBJECTID",$collid)}</fr>
9. }
10. </msg-error-title>
11. return $errtitle

但如果我删除内部 let ... return 并直接引用 $globalvar:MSGS 如下所示,则不会出现错误:

let $collid := $mydoc//collection-id/text()
let $errtitle :=
<msg-error-title>
{
<en>{replace($globalvar:MSGS/id("warning")/span[@lang="en"]/text(),"OBJECTID",$collid)}</en>,
<fr>{replace($globalvar:MSGS/id("warning")/span[@lang="fr"]/text(),"OBJECTID",$collid)}</fr>
}
</msg-error-title>
return $errtitle

我不明白为什么第一个例子中没有设置$msg?有替代方案吗?


添加测试

let $collid := "FOOID"
let $xml :=
<vocab xml:id="warning">
<span lang="en">Warning! Your changes (OBJECTID) could not be saved!</span>
<span lang="fr">Attention, vos modifications (OBJECTID) n’ont pas pu être sauvegardées !</span>
</vocab>

let $errtitle :=
<msg-error-title>
{let $msg := $xml/id("warning")/span
return
<en>{replace($msg[@lang="en"]/text(),"OBJECTID",$collid)}</en>,
<fr>{replace($msg[@lang="fr"]/text(),"OBJECTID",$collid)}</fr>
}
</msg-error-title>
return $errtitle

最佳答案

你的测试用例在 Saxon 中失败了

静态错误 XPST0008 对变量 $msg 的未解析引用

问题是“,”并没有像你想象的那样紧密结合,所以你需要在返回表达式周围添加额外的括号:

       return (
<en>{replace($msg[@lang="en"]/text(),"OBJECTID",$collid)}</en>,
<fr>{replace($msg[@lang="fr"]/text(),"OBJECTID",$collid)}</fr>
)

关于未设置 Xquery 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58030202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com