XQuery:将节点序列转换为数组的最佳方法
XQuery: best way to convert node sequence to array
我正在使用 Saxon,版本 9.8.0.6 和这个输入文档:
<simple>
<hello>Hello World!</hello>
<number>42</number>
<keyword>abc</keyword>
<keyword>def</keyword>
<keyword>ghi</keyword>
</simple>
而这个查询
xquery version "3.1";
fn:serialize(map{
'greeting': data(/simple/hello),
'number': number(/simple/number),
'keywords': array{ for $k in /simple/keyword return data($k) }
}, map{'method':'json', 'indent':true()})
输出(如预期):
{
"number":42,
"keywords": [
"abc",
"def",
"ghi"
],
"greeting":"Hello World!"
}
问题:
'keywords': array{ for $k in /simple/keyword return data($k) }
对我来说似乎有点笨拙。这是这样做的方法吗?有什么改进建议吗?
你可以减少
array{ for $k in /simple/keyword return data($k) }
至
array{data(/simple/keyword)}
我正在使用 Saxon,版本 9.8.0.6 和这个输入文档:
<simple>
<hello>Hello World!</hello>
<number>42</number>
<keyword>abc</keyword>
<keyword>def</keyword>
<keyword>ghi</keyword>
</simple>
而这个查询
xquery version "3.1";
fn:serialize(map{
'greeting': data(/simple/hello),
'number': number(/simple/number),
'keywords': array{ for $k in /simple/keyword return data($k) }
}, map{'method':'json', 'indent':true()})
输出(如预期):
{
"number":42,
"keywords": [
"abc",
"def",
"ghi"
],
"greeting":"Hello World!"
}
问题:
'keywords': array{ for $k in /simple/keyword return data($k) }
对我来说似乎有点笨拙。这是这样做的方法吗?有什么改进建议吗?
你可以减少
array{ for $k in /simple/keyword return data($k) }
至
array{data(/simple/keyword)}