我不熟悉xquery。为什么第一个xquery语句可以工作,而第二个不能?第一个在第二层有多个xml元素,第一个在顶层有多个。
let $payload := <root><foo>bar</foo></root>
return
<root>
{
if (exists($payload/foo)) then
<prop>
<key>mykey</key>
<value>bar</value>
</prop>
else
""
}
</root>
但这并不是
let $payload := <root><foo>bar</foo></root>
return
<root>
{
if (exists($payload/foo)) then
<key>mykey</key>
<value>bar</value>
else
""
}
</root>
发布于 2021-05-12 13:16:03
您需要将元素放在括号中,并用逗号分隔元素,因为没有封闭的根元素:
if (exists($payload/foo)) then (
<key>mykey</key>,
<value>bar</value>
) else (
""
)
发布于 2021-05-12 13:58:03
单元素构造函数是一个有效的表达式:
<key>mykey</key>
两个元素构造函数的序列(没有分隔符)不是:
<key>mykey</key>
<value>bar</value>
注意,这与XSLT不同,在XSLT中,这样的元素构造函数(称为文字结果元素)总是作为“序列构造函数”的一部分出现,并且序列构造函数允许出现多个元素。
发布于 2021-05-12 20:57:14
既然您已经开始学习XQuery,那么您可能会感兴趣的是,除了返回空字符串之外,您还可以返回一个空序列。
let $payload := <root><foo>bar</foo></root>
return
<root>
{
if (exists($payload/foo))
then (
<key>mykey</key>,
<value>bar</value>
)
else ()
}
</root>
https://stackoverflow.com/questions/67503992
复制相似问题