2016-09-05 80 views
0

我遇到了使用XQuery返回基於標記的常見元素的問題。我正在嘗試寫一個返回公共元素的XQ函數。比如我有一個XML爲: $ schoolA使用XQuery獲取常見元素

<schoolA> 
    <name>ABC</name> 
    <students>1000</students> 
    <classes>25</classes> 
</schoolA> 
<schoolA> 
    <name>DEF</name> 
    <students>1200</students> 
    <classes>20</classes> 
</schoolA> 
<schoolA> 
    <name>GHY</name> 
    <students>900</students> 
    <classes>30</classes> 
</schoolA> 

爲另一種: $ schoolB

<schoolB> 
    <name>ABC</name> 
    <students>1000</students> 
    <classes>25</classes> 
</schoolB> 
<schoolB> 
    <name>DEF</name> 
    <students>1200</students> 
    <classes>20</classes> 
</schoolB> 
<schoolB> 
    <name>XYZ</name> 
    <students>1100</students> 
    <classes>30</classes> 
</schoolB> 

函數應該返回: $ commonSchool

<schoolA> 
    <name>ABC</name> 
    <students>1000</students> 
    <classes>25</classes> 
</schoolA> 
<schoolA> 
    <name>DEF</name> 
    <students>1200</students> 
    <classes>20</classes> 
</schoolA> 

匹配因素是名稱。我試圖編寫一個嵌套for循環,但堅持將元素附加到變量。如何做到這一點的任何線索都會很棒!

+1

提問作業幫助的問題必須包括您迄今爲止解決問題所做的工作摘要,以及對解決問題的描述。請參閱http://stackoverflow.com/help/on-topic。 – joewiz

+0

XQuery 1.0或3.0/3.1?在3.0/3.1中,您可以使用新的「group by」構造。 –

回答

1

此XQuery函數根據<name>元素的值匹配兩個元素序列。爲簡單起見,假定您已將兩組School元素封裝在名爲<schools>的封裝中。

這適用於XQuery 1.0。

declare namespace _="http://local/funcs"; 

declare function _:munge($schoolA as element()*, $schoolB as element()*) { 
    $schoolA[name=$schoolB/name] 
}; 

_:munge(schools/schoolA, schools/schoolB) 
+0

或者更簡單地說,函數的主體可以是'$ schoolA [name = $ schoolB/name]' –

+0

不幸的是,該應用程序使用v1.0。我會試一試!謝謝! –

+0

將其轉化爲一個獨立的示例,併入Michael的改進,並驗證了XQuery 1.0的兼容性 – Chondrops