如何使用XQuery输出具有相同名称[多次出现]但不同值的XML节点

时间:2016-07-19 00:52:50

标签: xml xml-parsing xquery xquery-sql xquery-3.0

我有一个要求,其中XML元素节点说' UseCountIds'具有多个出现次数和多个值。由于元素节点名称保持不变,我需要将其中的每一个区分为UseCountIds1,UseCountIds2,UseCountIds3。

截至目前,它只配备了3次。

响应有效负载如下所示。在哪个Xquery上执行。

           <entries>
                <id>1</id>
                <UseCountIds>100</UseCountIds>
                <UseCountIds>200</UseCountIds>
                <UseCountIds>300</UseCountIds>
          </entries>

使用Xquery,它应该输出到分隔文件。

        Output File
         id,UseCountIds1,UseCountIds2,UseCountIds3
         1,100,200,300

期待您宝贵的想法。

1 个答案:

答案 0 :(得分:1)

如果XML输入的标记结构是固定的,只有值是可变的,那么最简单的查询将是

concat(
  "id,UseCountIds1,UseCountIds2,UseCountIds3&#xa;",
  string-join(/entries/*, ',')
) 

适用于任何子标记的更通用的解决方案可能是

declare function f:label($element as element()) as xs:string {
  if (count($element/../*[node-name(.)=node-name($element)]) gt 1)
  then concat(local-name($element), count($element/preceding-sibling::*[node-name(.)=node-name($element)]))
  else local-name($element)
};

concat(string-join(/entries/*/f:label(.), ','), '&#xa;',
string-join(/entries/*, ',')