2011-12-08 9 views
1

複数のxmlファイルを除いて、opをどのように見つけて使用するのですか?複数のxmlファイルを除いて、opをどのように見つけて使用するのですか?

私はファイル1とファイル2からノードを取得しました。xquery式では、これらの2つを除いて、演算子を探す必要があります。私がop:exceptを使うと、私は空のセットを得ることになります。

XMLファイル1:

<a>txt</a> 
<a>txt2</a> 
<a>txt3</a> 

XMLファイル2:

<a>txt2</a> 
<a>txt4</a> 
<a>txt3</a> 

私はOPからの出力たい:($ nodesfromfile1、$ nodesfromfile2)がために:

<a>txt</a> 
+0

奇数あなたは 'except'を使うと空のセットを返すと言います。ノードIDに基づくものを除きます。ここではノードのアイデンティティが異なります(ノードは異なるファイルから来るため)結果は左のオペランドになります。 – grtjn

答えて

2

それ次のコードでは、戻り値の後ろの1行に効果的になります。注

let $file1 := (
    <a>txt</a>, 
    <a>txt2</a>, 
    <a>txt3</a> 
) 
let $file2 := (
    <a>txt2</a>, 
    <a>txt4</a>, 
    <a>txt3</a> 
) 
return 
    $file1[not(. = $file2)] 
あなたが好きな場合は、関数の中でそれを置くことができ、それはすでにので、多分価値がない、非常に密..です

、あなたはまた、「除く」キーワード( $file1 except $file2)を持っているが、それは上の作品ノード 同一性ノードが異なるファイルから来た場合には動作しません。

ところで、上記のコードでは、比較のために文字列等価を使用しています。完全なノード構造の比較を行う場合は、deep-equal()関数を使用することもできます。

HTH!

関連する問題