我正在尝试集成两个系统。 源系统使用值“标准”,而目标系统接受“标准”。 因此,我需要从源系统修改XML有效负载,以便进行这些类型的转换。
例如XML:
<Response>
<Object>
<ID>Test</ID>
<Child>
<Element1>Standard</Element1>
<Element2>Some Value</Element2>
</Child>
<Child>
<Element1>Extended</Element1>
<Element2>Some Value</Element2>
</Child>
<Child>
<Element1>Standard</Element1>
<Element2>Some Value</Element2>
</Child>
</Object>
</Response>
输出应为:
<Response>
<Object>
<ID>Test</ID>
<Child>
<Element1>STD</Element1>
<Element2>Some Value</Element2>
</Child>
<Child>
<Element1>EXT</Element1>
<Element2>Some Value</Element2>
</Child>
<Child>
<Element1>STD</Element1>
<Element2>Some Value</Element2>
</Child1>
</Object>
</Response>
寻找一个xQuery脚本来翻译上面的XML。 感谢任何帮助。
包含翻译代码的示例XML: 带目标值的XML如下所示:
<Root>
<KeyCode>
<Key>
<SourceKey>Standard</SourceKey>
<DestKey>STD</DestKey>
</Key>
<Key>
<SourceKey>Extended</SourceKey>
<DestKey>EXT</DestKey>
</Key>
<Key>
<SourceKey>Privileged</SourceKey>
<DestKey>PRV</DestKey>
</Key>
</KeyCode>
</Root>
使用以下代码:
let $keys := doc("key.xml")/Root/KeyCode
let $response := doc("test.xml")/Response
for $child in $response/Object/Child
return
<Response>
<Object>
{$response/Object/ID}
<Child>
{$keys/Key[SourceKey=$child/Element1]/DestKey}
{$child/Element2}
</Child>
</Object>
</Response>
获得:
<Response>
<Object>
<ID>Test</ID>
<Child>
<DestKey>STD</DestKey>
<Element2>Some Value</Element2>
</Child>
</Object>
</Response>
<Response>
<Object>
<ID>Test</ID>
<Child>
<DestKey>EXT</DestKey>
<Element2>Some Value</Element2>
</Child>
</Object>
</Response>
<Response>
<Object>
<ID>Test</ID>
<Child>
<DestKey>STD</DestKey>
<Element2>Some Value</Element2>
</Child>
</Object>
</Response>
我正在寻找
<Response>
<Object>
<ID>Test</ID>
<Child>
<DestKey>STD</DestKey>
<Element2>Some Value</Element2>
</Child>
<Child>
<DestKey>EXT</DestKey>
<Element2>Some Value</Element2>
</Child>
<Child>
<DestKey>STD</DestKey>
<Element2>Some Value</Element2>
</Child>
</Object>
</Response>
请帮助告知错误的地方
答案 0 :(得分:0)
我认为嵌套不太正确。 Response
和Object
构造函数需要在FLWOR表达式之外,如下所示:
let $keys := doc("key.xml")/Root/KeyCode
let $response := doc("test.xml")/Response
return
<Response>
<Object>
{
$response/Object/ID,
for $child in $response/Object/Child
return
<Child>
{
$keys/Key[SourceKey=$child/Element1]/DestKey,
$child/Element2
}
</Child>
}
</Object>
</Response>