検索するノードの名前を指定する文字列に基づいて、子ノードのサブセットを返すことができるXQuery関数が必要です。以下のような定義を満たす必要があり、任意の文書を扱う必要がある場合。私はその後、関数は$ includedNodesで指定された名前の子ノードのみが返されるように文書を変換する必要があり、いくつかのXML文書にMarkLogic XML文書をXQueryの文字列に基づいて動的に書き直します
let $doc :=
<foo a="b">
<bar>hello</bar>
<baz>1</baz>
<bang>
<text>world</text>
</bang>
</foo>')
を持っていた考える
local:apply-node-includes($document, $includedNodeNames as xs:string*)
。
例local:apply-node-includes($doc, 'baz')
は
<foo a="b">
<bar>hello</bar>
<bang>
<text>world</text>
</bang>
</foo>
私は、ノードを反復処理実験を返します
<foo a="b">
<baz>1</baz>
</foo>
例local:apply-node-includes($doc, ('bar','bang')))
を返し、および/または再帰typeswitchのいくつかのフォームを使用しますが、これまでに取得することができませんでしたでしょうそれは正しい。 'bang.text'には孫のテキストノードだけが含まれ、兄弟は含まれませんが、あまりにも多くのことを尋ねているかもしれません!
関数に文字列ではなくxs:QNamesのシーケンスを使用させることを検討してください。あなたのXMLはデフォルトの名前空間を使用しているので、あなたは何をしているのですか?しかし、名前空間がある場合は問題があります。 –