2012-10-04 64 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表達式):

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

產生想要的,正確的結果:

<fruit>Kiwi</fruit> 

說明

使用通用比較運算符=(與數值比較運算符eq對比)

+0

是上面的代碼工作。但我可以知道下面的代碼是如何工作的。 [不是(= 什麼是句號,等於意味着在這裏嗎?「(=」 = – setiasetia

+0

@setiasetia,通過'='經營者的定義了XPath 2.0(這是XQuery的一個真子集) ,「當評估其中一個操作數是一系列項目的一般比較時,只要一個實現在第一個操作數中找到一個項目,並且第二個操作數中的項目具有所需的量值關係,它就立即返回true」 - this在XPath 2.0和XQuery 1.0規範中都是相同的文本,這意味着如果'='的一個操作數是一個序列,那麼只有當它具有一個'='的項時,比較結果纔是'true()到另一個操作數 - 否則 - 'false()'。 –

+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 –