Xqueryの違い
name(/Data/element1/element2[@ID=$ID]),
と
/Data/element1/element2[@ID=$ID]/name()
結果がシーケンスではない場合のベストプラクティスはどれですか?(もしそうなら、前者は基本的に使えません)
私が忘れているものはありますか、それともその状況で完全に交換可能ですか?
XPath 2.0では、name()
関数の引数が複数の項目を含むシーケンスである場合、この式はエラーを発生させます。
name(/Data/element1/element2)
XPath 1.0では、これはエラーではなく、name()
ノードセットの最初のノードを引数として使用します。
結果がである必要があることが一目でわかるので、両方とも等しく役に立たない"element2"
。
結果がシーケンスではない場合のベストプラクティスはどれですか(そうである場合、前者は基本的に使用できません)?
これは、XPath 2.0/XQueryの両方の場合に機能します。
/Data/element1/element2/name()
違いは、name()はname(。)と等しいため、同じ関数であるため違いがないことです。したがって、構文は異なりません。何が起こるかというと、name(X)には、常に1回以下の出力を持つ式が含まれている必要があります。
使用できるように:
/Data/name(./element1/element2) = /Data/name(element1/element2)
* element2, if a single occurrence in the whole data
/Data/element1/name(./element2) = /Data/element1/name(element2)
* element2, if a single occurrence per any element1, for each element1
/Data/element1/element2/name() = /Data/element1/element2/name(.)
* element2, no matter num of occurrences, we print them all
したがって、1回だけ発生することが予想される場合は、仮定に検証ステップを追加できるため、name(complete_expression)を使用できますが、その代わりに、式(array )いつかデータが変更され、それが有効で期待される場合