質問: 現在、XQueryプログラムの中で、あるURIのノードに対してXPath式のパスに変数を指定したいと考えておりますが、上手くいきません。 実現したいことのコードのイメージは以下の感じです。 以下を実行すると「"bbb"はノードではない」というエラーになってしまいます。 (※MarkLogicデータベースのQuery Consoleにて確認。ちなみに対象ノードには'/aaa/bbb/cccc'ノードは存在しております。) XPath式の途中に変数を指定することはそもそも出来ないのでしょうか。 MarkLogicに依存するような問題とは思いませんが、この件で何か知見のある方がいらっしゃいましたらご教授願います。 ``` (:PGでパスを取得し、変数valに格納:) let $val := "bbb" (:URIノードにおいて、変数valをパスに指定:) let $results := fn:doc("URI")/aaa/$val/ccc ```
回答: XQuery経験ありませんが、要素名を文字列の変数として扱いたいのであれば ``` let $results := fn:doc("URI")/aaa/*name() eq $val]/ccc ``` で良いと思います. 以下oXygen 19.1で確認したもの(入力ファイル名は違います) ![画像の説明をここに入力