Как преобразовать ввод XML из одного формата в другой - PullRequest
0 голосов
/ 07 февраля 2019

У меня проблемы с преобразованием двух форматов вывода XML.У меня есть вход, который содержит студента и его / ее флажки в службе.Входные данные выглядят так:

<root>
    <searchCount>7</searchCount>
    <respData>
        <ferpaDeclaration>true</ferpaDeclaration>
        <nuId>1002</nuId>
        <hsn>false</hsn>
        <gni>false</gni>
        <privacy>false</privacy>
        <gdpr>true</gdpr>
        <adv>false</adv>
        <anb>false</anb>
        <shl>false</shl>
        <grd>false</grd>
        <doc>false</doc>
    </respData>
    <respData>
        <nuId>1001</nuId>
        <ferpaDeclaration>true</ferpaDeclaration>
        <hsn>false</hsn>
        <gni>true</gni>
        <privacy>false</privacy>
        <gdpr>true</gdpr>
        <adv>false</adv>
        <anb>true</anb>
        <shl>true</shl>
        <grd>false</grd>
        <doc>true</doc>
    </respData>
    <responseMessage>Success</responseMessage>
    <status>200</status>
</root>

Мне нужно преобразовать его в более общий вывод с помощью XQuery (он находится в Informatica Cloud Real time):

<student-optins>
  <student-category-optin>
    <nuid>1001</nuid>
    <category>arg</category>
    <optin>false</optin>
  </student-category-optin>
  <student-category-optin>
    <nuid>1001</nuid>
    <category>ferpaDeclaration</category>
    <optin>true</optin>
  </student-category-optin>
  <student-category-optin>
    <nuid>1001</nuid>
    <category>hsn</category>
    <optin>false</optin>
  </student-category-optin>
</student-optins>

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Допустим, что вход назначен для $ myInput, ваш xQuery может выглядеть следующим образом.

Если вам нужен отсортированный вывод, вы можете выполнить orderby.

 {
   <student-optins>
    for $x in $myInput//respData
    return  
    <student-category-optin> 
    <nuid>{$x/nuid} </nuid> 
     <category>{$x/category}</category> 
    <optin>{$x/optin}</optin> 
    </student-category-optin>
} 
0 голосов
/ 08 февраля 2019

Вы можете сделать это с помощью скрипта XQuery ниже.Настройте имя source.xml, и в конце будет сгенерирован вывод:

let $xml := for $x at $pos in doc("source.xml")/root/respData return ($x)
return
    <student-optins>
        { for $oi in $xml/*[not(self::nuId)] return 
            element {'student-category-optin'}
            {
                $oi/../nuId,
                element {'category'}
                {
                    local-name($oi)
                },
                element {'optin'}
                {
                    $oi/text()
                }
            }
        }
    </student-optins>

Вывод:

<?xml version="1.0" encoding="UTF-8"?>
<student-optins>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>ferpaDeclaration</category>
        <optin>true</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>hsn</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>gni</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>privacy</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>gdpr</category>
        <optin>true</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>adv</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>anb</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>shl</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>grd</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1002</nuId>
        <category>doc</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>ferpaDeclaration</category>
        <optin>true</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>hsn</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>gni</category>
        <optin>true</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>privacy</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>gdpr</category>
        <optin>true</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>adv</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>anb</category>
        <optin>true</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>shl</category>
        <optin>true</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>grd</category>
        <optin>false</optin>
    </student-category-optin>
    <student-category-optin>
        <nuId>1001</nuId>
        <category>doc</category>
        <optin>true</optin>
    </student-category-optin>
</student-optins>
...