如何将两个行值移动到xquery中的列和相应的行

时间:2016-08-29 03:35:45

标签: xml xquery

下面是XML输出,我必须从详细信息字段中提取值 - 第一个值作为列名,第二个值作为行中的值。

示例:列名称 - renamedCount及其行值为64          列名称-successUpdateCount,其行值为64 等等..

    <root>

     <details>
     <values>renamedCount</values>
     <values>64</values>
     <values>successUpdateCount</values>
     <values>64</values>
     <values>totalCreateCount</values>
     <values>0</values>
     <values>successRowCount</values>
     <values>64</values>
     <values>invalidCount</values>
     <values>0</values>
     <values>totalUpdateCount</values>
     <values>4211</values>
     <values>failedCount</values>
     <values>64</values>
     <values>totalRowCount</values>
     <values>0</values>
     <values>4275</values>
     <occurrences>0</occurrences>
     <localMessageText>Accounts: 64 (0/64) rows successful, 4211 ignored </localMessageText>
     <type>hierarchyRowsProcessed</type>
  </details>
  <details>
</root>

请建议如何将一个值指定为变量名称,将第二个值指定为值?

预先感谢您的支持, 凯利

1 个答案:

答案 0 :(得分:0)

分组或窗口条款对此有帮助。

例如,可以使用整数除以2来计算行号,并使用它来计算组值:

let $doc :=
  <root>
    <details>
      <values>renamedCount</values>
      <values>64</values>
      <values>successUpdateCount</values>
      <values>64</values>
      <values>totalCreateCount</values>
      <values>0</values>
      <values>successRowCount</values>
      <values>64</values>
      <values>invalidCount</values>
      <values>0</values>
      <values>totalUpdateCount</values>
      <values>4211</values>
      <values>failedCount</values>
      <values>64</values>
      <values>totalRowCount</values>
      <values>0</values>
      <values>4275</values>
      <occurrences>0</occurrences>
      <localMessageText>Accounts: 64 (0/64) rows successful,
        4211 ignored </localMessageText>
      <type>hierarchyRowsProcessed</type>
   </details>
 </root>
for $values at $pos in $doc/details/values
let $row-number := ($pos + 1) idiv 2
group by $row-number
return <row number="{$row-number}">{$values}</row>

它需要XQuery 3.0进行分组和窗口化。可以使用Zorba here测试查询。