0
My XML Response Load appears as below


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

这里的“条目”是具有子元素的父节点,即“id”、“UseCountIds”。上面的例子是 id=1 。同样,对于 id=2 或 id=3 等,也有许多“条目”。

'id' 是一种独特的价值。

我做了一个 XQuery 来从 XML Payload 中提取 Child 元素。下面是使用的 Xquery

             let $entries := /root/entries
             return
             for $entry in $entries
             return
             <entries>
              {
                $entry/id,
                <UseCountIds>{data($entry/UseCountIds)}</UseCountIds>
               }    
             </entries>

问题是,如果将上述 XQuery 输出加载到 .csv 文件中,它会显示为

                   id,UseCountIds
                   1,100 200 300

UseCountIds(多个值)出现在以空格分隔的列中。

我的要求是具有如下所需的输出

                   id,UseCountIds
                   1,100
                   1,200
                   1,300

此外,UseCountIds 不仅限于出现 3 次。对于唯一的 'id' 可以有 'n' no。的 UseCountIds 。

将 UseCountIds 连接到行级别的唯一“id”总是好的。

请分享您的想法,如何调整 XQuery 以获得上述所需的输出。

谢谢, TG

4

1 回答 1

0

目前尚不清楚如何从 XQuery 的输出生成 CSV,但是,如果我可以假设您只需为源 XML 中entries的每个元素提供一个元素UseCountIds即可生成所需的 CSV 数据,那么这是一种可能的 XQuery :

for $c in /root/entries/UseCountIds
return
<entries>
{
    $c/preceding-sibling::id,
    $c
}    
</entries>

如果没有产生所需的输出,那么请发布 XQuery 输出应该是怎样的。


entries即使没有孩子也能返回UseCountIds

for $e in /root/entries
let $id := $e/id
let $useCountIds := $e/UseCountIds
return
    if($useCountIds) then
        for $c in $useCountIds
        return
            <entries>
            {
                $id,
                $c
            }
            </entries>
    else 
        <entries>
        {
            $id,
            <UseCountIds></UseCountIds>
        }
        </entries>

demo

于 2017-04-05T04:54:06.160 回答