2012-10-04 2 views
2

Person.xml쿼리 XML

<person> 
    <PID> 
    <Name>John</Name> 
    <fruit>Orange</fruit> 
    </PID> 
    <PID> 
    <Name>Wendy</Name> 
    <fruit>Apple</fruit> 
    </PID> 
    <PID> 
    <Name>Alex</Name> 
    <fruit>Kiwi</fruit> 
    </PID> 
</person> 

Store.xml

<store> 
    <AU> 
    <name>Star</name> 
    <fruit>Orange</fruit> 
    </AU> 
    <AU> 
    <name>Moon</name> 
    <fruit>Apple</fruit> 
    </AU> 
</store> 

나는 위의 두 XML 파일을 가지고 있고 과일의 유형을 찾기 위해 XQuery를 코드를 작성할 필요가 상점에서 사용할 수없는 사람을 먹는다. 상점에서 사용할 수없는 과일을 확인하는 코드는 어떻게 작성합니까?

답변

0

이 쿼리 (순수 XPath는 2.0 표현 될 일이) :

<fruit>Kiwi</fruit> 

설명 :

doc('file:///c:/temp/delete/person.xml') 
    /*/*/fruit 
     [not(. 
      = 
      doc('file:///c:/temp/delete/store.xml') 
       /*/*/fruit) 
     ] 

이 원하는 정확한 결과를 생성

일반 비교 연산자 사용 = (값 비교 연산자 eq과 대조)

+0

위 코드는 작동합니다. 그러나 아래 코드가 어떻게 작동하는지 알 수 있습니까? [없습니다. (=는 XQuery의 진정한 부분 집합의 XPath 2.0 (에'='연산자의 정의에 의해, fullstop을 수행하고 여기에 의미 같아? "(. =" = – setiasetia

+0

@setiasetia 무엇 ) "어느 피연산자가 일련의 항목 인 일반적인 비교를 평가할 때 구현은 첫 번째 피연산자의 항목과 두 번째 피연산자의 필수 자계 관계가있는 항목을 찾자 마자 true를 반환 할 수 있습니다."- this XPath 2.0 스펙과 XQuery 1.0 스펙 모두에서 동일한 텍스트입니다. 즉,'= '의 피연산자 중 하나가 시퀀스 인 경우,'='항목이있는 경우에만 비교가'true() '가됩니다. 다른 피연산자로 - 그렇지 않으면 - 거짓()'. –

+0

@setiasetia : 여기를 참조하십시오 : http://www.w3.org/TR/2010/REC-xquery-20101214/#id-general-comparisons and here : http : //www.w3. org/TR/2010/REC-xpath20-20101214/# id-general-comparisons –