XQuery Updateで自動インクリメント値を模倣するために<root count="0"/>
、これを初めて実行する場合を想定して、以下は正常に機能します。
let $count := /root/@count
return (
insert node <node id='{ $count }'/> into /root,
replace value of node $count with $count + 1
)
...うまく譲ります:
<root count="1">
<node id="0">
</root>
ただし、Javaコードでノードを定義し、それをor、または、またはとしてバインドしたいと思います。好き:org.w3c.dom.Node
Document
String
String expr =
" declare variable $n external; "
+ " let $count := /root/@count; "
+ " return ( "
+ " insert node $n into /root, "
+ " replace value of node $count with $count + 1 "
+ " ) ";
XQConnection xqc = ...;
XQPreparedExpression xqp = xqc.prepareExpression(expr);
// org.w3c.dom.Node node is <node id='{ $count }'/>
xqp.bindNode(new QName("n"), node, null);
xqp.executeQuery();
ただし、これにより、属性にテキストが残ります。 { $count }
ノードを値としてバインドしxs:string
ても同じ効果があります。
もちろん、これは「XQueryインジェクション」に対する優れた保護です。それでも:XQuery Updateに、変数自体にある囲まれた式を処理させる方法はありますか?
(XQueryで自動インクリメント値を使用する他の賢いアイデアも大歓迎ですが、XQuery Updateで自動インクリメントを参照してください?)