繁体   English   中英

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

[英]XQuery to retrieve values from child nodes of an element node having name changes for every XML record

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)遍历所有元素节点

任何有价值的建议都将不胜感激。

谢谢

您可以使用谓词过滤器选择前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 
 }

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

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

复制前50个条目而只保留name子元素是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM