我正在寻找一些指导,让我朝着正确的方向前进。我正在使用xquery返回一个类似于下面的xml的xml文档。
<myDoc>
<myElements id="1">
<myElement key="one">aaa</myElement>
<myElement key="two" >bbb</myElement>
<myElement key="three">ccc</myElement>
</myElements>
<myElements id="2">
<myElement key="one">ddd</myElement>
<myElement key="two" >eee</myElement>
<myElement key="three">fff</myElement>
</myElements>
</myDoc>
我正在尝试仅使用指定了密钥的特定<myElements>
节来返回文档。例如,如果指定了键“one”和“three”,则生成的xml应如下所示:
<myDoc>
<myElements id="1">
<myElement key="one">aaa</myElement>
<myElement key="three">ccc</myElement>
</myElements>
<myElements id="2">
<myElement key="one">ddd</myElement>
<myElement key="three">fff</myElement>
</myElements>
</myDoc>
这可行吗?任何可以指出我正确方向的建议都会非常感激。
答案 0 :(得分:1)
这类问题更适合XSLT,但也可以在XQuery中解决它们。
像这样:
let $vKeys := ('one', 'three')
return
element {name(/*)}
{for $child in /*/*
return
element {name($child)}
{for $att in $child/@*
return
attribute {name($att)} {$att},
for $grandchild in $child/myElement[@key=$vKeys]
return $grandchild
}
}
对提供的XML文档执行此查询:
<myDoc>
<myElements id="1">
<myElement key="one">aaa</myElement>
<myElement key="two" >bbb</myElement>
<myElement key="three">ccc</myElement>
</myElements>
<myElements id="2">
<myElement key="one">ddd</myElement>
<myElement key="two" >eee</myElement>
<myElement key="three">fff</myElement>
</myElements>
</myDoc>
产生了想要的正确结果:
<myDoc>
<myElements id="1">
<myElement key="one">aaa</myElement>
<myElement key="three">ccc</myElement>
</myElements>
<myElements id="2">
<myElement key="one">ddd</myElement>
<myElement key="three">fff</myElement>
</myElements>
</myDoc>