XQuery 用于从每个 XML 记录的名称更改的元素节点的子节点检索值



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

  1. 识别元素节点中值的总数(例如:- 50,即最后一个节点是 <_50>(

  2. 历所有元素节点直到 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(遍历所有元素节点

任何有价值的建议都非常感谢。

谢谢

获取条目计数只是count(/root/*)

复制前 50 个条目只是subsequence(/root/*, 1, 50).

复制前 50 个条目同时仅保留name子元素是

for $e in subsequence(/root/*, 1, 50)
return element{local-name($e)}{$e/name}

您可以使用谓词过滤器选择前 50 个元素:/root/*[1 to 50]

您还可以在循环访问entry元素集时使用位置变量,在 FLWOR 中使用where子句以限制为前 50 个,并复制所有$entry/*子元素而不是重新构造它们:

for $entry at $i in /root/*
where $i <= 50
return
element { $entry/local-name() } { 
$entry/name 
}

最新更新