2011-12-08 4 views
1

op : : 여러 xml 파일을 제외하고는 어떻게 찾/사용합니까?op : : 여러 xml 파일을 제외하고 어떻게 사용합니까?

파일 1과 파일 2에서 노드를 얻었습니다. xquery 표현식에서 op를 찾으려고합니다 : 그 둘을 제외하고. op : except를 사용할 때, 나는 빈 세트를 얻는다.

XML 파일 1 :

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

XML 파일 2 :

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

내가 작전에서 출력합니다 : ($ nodesfromfile1, $ nodesfromfile2)이 될 수 :

<a>txt</a> 
+0

이상한 당신은 'except'를 사용하면 빈 집합을 반환한다고 말합니다. 노드 ID를 기반으로합니다. 여기서는 노드 ID가 다르므로 (노드가 다른 파일에서 왔기 때문에) 결과는 왼쪽 피연산자 여야합니다. – grtjn

답변

2

이 다음 코드에서 수익 뒤에 한 줄로 효과적으로 나타납니다. ..

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)하지만 '제외'그가 작동이 node identity 노드가 다른 파일에서 온 경우 작동하지 않습니다.

그런데 위의 코드는 비교를 위해 문자열 등가성을 사용합니다. 전체 노드 구조에 대한 비교를 원할 경우 deep-equal() 기능을 사용할 수도 있습니다.

HTH!

관련 문제