XML响应有效载荷如下
<root>
<_1>
<expand>description,lead,url,projectKeys</expand>
<name>ABC</name>
<id>12631</id>
</_1>
<_2>
<expand>description,lead,url,projectKeys</expand>
<name>XYZ</name>
<id>12632</id>
</_2>
<_3>
<expand>description,lead,url,projectKeys</expand>
<name>JKL</name>
<id>12634</id>
</_3>
</root>
此处<_1>,<_ 2>,<_ 3>可以顺序增加,具体取决于XML记录的总数。
我的要求是编写一个XQuery
标识元素节点中值的总数(例如:-50,即最后一个节点为<_50>)
遍历所有元素节点直到50个(例如)并拉出其相应的子节点(例如:expand,name,id)
我有一个类似的XML响应有效负载,它不是元素节点值(<_1>,<_ 2>,<_ 3>)的顺序增加,而是对所有元素节点都有一个固定的名称(条目)。 (下面的示例),我编写了一个XQuery来从其子节点中检索值(请参见下文)。
<root>
<entries>
<added>1534815831000</added>
<updated>1534815831000</updated>
</entries>
<entries>
<added>1534815832000</added>
<updated>1534815832000</updated>
</entries>
</root>
XQuery是
let $entries := /root/entries
return
for $entry in $entries
return
<entries>
{
<added>{data($entry/added)}</added>,
<updated>{data($entry/updated)}</updated>
}
</entries>
挑战是
a)当元素节点名称随每条记录更改时
b)遍历所有元素节点
任何有价值的建议都将受到赞赏。
谢谢
答案 0 :(得分:0)
您可以使用谓词过滤器选择前50个元素:/root/*[1 to 50]
在遍历一组entry
元素时,还可以使用positional variable,在FLWOR中使用where
子句来限制前50个,并复制所有{{ 1}}子元素,而不是重建它们:
$entry/*
答案 1 :(得分:0)
获取条目数仅为count(/root/*)
。
复制前50个条目只是subsequence(/root/*, 1, 50)
。
在仅保留name
子元素的情况下复制前50个条目是
for $e in subsequence(/root/*, 1, 50)
return element{local-name($e)}{$e/name}