我有一个要求,其中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
期待您宝贵的想法。
答案 0 :(得分:1)
如果XML输入的标记结构是固定的,只有值是可变的,那么最简单的查询将是
concat(
"id,UseCountIds1,UseCountIds2,UseCountIds3
",
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(.), ','), '
',
string-join(/entries/*, ',')