【发布时间】:2016-11-27 18:37:48
【问题描述】:
我需要一个能够重写文档的 XQuery 函数,特别是返回子节点的子集,基于指定要检索的节点名称的字符串数组。如果应该满足如下定义,并且需要使用任意文档。
local:apply-node-includes($document, $includedNodeNames as xs:string*)
鉴于我有一些 xml 文档
let $doc :=
<foo a="b">
<bar>hello</bar>
<baz>1</baz>
<bang>
<text>world</text>
</bang>
</foo>')
然后该函数应该转换文档,以便只返回名称在 $includedNodes 中指定的子节点。
示例local:apply-node-includes($doc, 'baz') 将返回
<foo a="b">
<baz>1</baz>
</foo>
示例local:apply-node-includes($doc, ('bar','bang'))) 将返回
<foo a="b">
<bar>hello</bar>
<bang>
<text>world</text>
</bang>
</foo>
我尝试在节点上进行迭代,和/或使用某种形式的递归类型开关,但到目前为止还无法做到正确。如果它完全递归地工作,那就太酷了,所以 'bang.text' 将只包括孙文本节点而不包括它们的任何兄弟姐妹,但也许这要求太多了!
【问题讨论】:
-
考虑让您的函数采用一系列 xs:QNames 而不是字符串。您所拥有的工作是因为您的 XML 使用默认命名空间,但是在存在命名空间的情况下,您会遇到问题。