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

期待您的宝贵意见。

4

1 回答 1

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/*, ',')
于 2016-07-19T07:34:58.277 回答