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