1

Xqueryの違い

    name(/Data/element1/element2[@ID=$ID]), 

    /Data/element1/element2[@ID=$ID]/name()

結果がシーケンスではない場合のベストプラクティスはどれですか?(もしそうなら、前者は基本的に使えません)

私が忘れているものはありますか、それともその状況で完全に交換可能ですか?

4

2 に答える 2

1

XPath 2.0では、name()関数の引数が複数の項目を含むシーケンスである場合、この式はエラーを発生させます。

name(/Data/element1/element2)

XPath 1.0では、これはエラーではなく、name()ノードセットの最初のノードを引数として使用します。

結果がである必要があることが一目でわかるので、両方とも等しく役に立たない"element2"

結果がシーケンスではない場合のベストプラクティスはどれですか(そうである場合、前者は基本的に使用できません)?

これは、XPath 2.0/XQueryの両方の場合に機能します。

/Data/element1/element2/name()
于 2012-07-16T14:33:42.907 に答える
1

違いは、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 )いつかデータが変更され、それが有効で期待される場合

于 2012-07-16T16:39:37.033 に答える