Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将XML输入从一种格式转换为另一种格式_Javascript_Xml_Xquery - Fatal编程技术网

Javascript 如何将XML输入从一种格式转换为另一种格式

Javascript 如何将XML输入从一种格式转换为另一种格式,javascript,xml,xquery,Javascript,Xml,Xquery,我在两种XML输出格式之间转换时遇到困难。我有一个输入,其中包含一个学生和他/她的optin标志。输入如下所示: <root> <searchCount>7</searchCount> <respData> <ferpaDeclaration>true</ferpaDeclaration> <nuId>1002</nuId> <hs

我在两种XML输出格式之间转换时遇到困难。我有一个输入,其中包含一个学生和他/她的optin标志。输入如下所示:

<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实时内:

<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>

您可以使用下面的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>
输出为:


假设输入被分配给$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>
} 

类别和选项值来自何处?我看不到与源XML的任何关系…很抱歉,问题定义不完整。下面是一些澄清。我在问题中添加了上述代码。以后,请添加带有编辑而非注释的代码。您仍然没有回答以下问题:类别和optin值来自何处?就目前而言,这个问题是无法回答的。我昨天发布了一个澄清,但我想没有花时间。给你。对于每个以nuId作为主键的组,我需要生成多个重复组,每个类别一个。该类别对应一个具有三个字母名称的元素,即grd、shl、anb、adv等和ferpaDeclaration。optin标志optin元素是具有3位名称的元素的值,例如//root/respData/adv/text
 {
   <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>
}