2016-09-05 4 views
0

XQueryを使用してタグに基づいて共通要素を返すときに問題が残っています。私は共通の要素を返すXQ関数を記述しようとしています。 $ schoolAXQueryを使用して共通要素を取得する

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

などの他の1: $ 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> 

マッチング例えば私はXMLを持っていますfactorは名前です。入れ子になったforループを作成しようとしていますが、その要素を変数に追加しています。それを行う方法の手がかりは素晴らしいでしょう!

+1

問題を解決するためにこれまでに行っている作業の概要と解決している問題の説明を宿題のヘルプに含める必要があります。 http://stackoverflow.com/help/on-topicを参照してください。 – joewiz

+0

XQuery 1.0または3.0/3.1? 3.0/3.1では、新しい「グループ化」構文を使用できます。 –

答えて

1

このXQuery関数は、<name>要素の値に基づいて2つの要素のシーケンスと一致します。簡単にするために、2つのセットの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

これを自己完結型の例にし、マイケルの改良を取り入れ、XQuery 1.0との互換性を検証しました – Chondrops

関連する問題