2017-01-20 6 views
1

以下のXMLファイルには、ITEMSITEMTYPESがあります。 ITEMTYPESは、指定された型の項目を記述します。ITEMSは、これらの型のインスタンスです。 ITEMTYPEとの関係ITEMn:1子ノードではないデータを取得できるXmlListModelのクエリ

ITEMある属性typeによってITEMTYPEを参照:

<ROOT> 
    <ITEMS> 
    <ITEM type="Z"/> 
    <ITEM type="X"/> 
    <ITEM type="Y"/> 
    <ITEM type="X"/> 
    <ITEM type="Y"/> 
    <ITEM type="Z"/> 
    </ITEMS> 

    <ITEMTYPES> 
    <ITEMTYPE type="X"> 
     <Color>Red</Color> 
     <Size>100</Size> 
    </ITEMTYPE> 

    <ITEMTYPE type="Y"> 
     <Color>Green</Color> 
     <Size>200</Size> 
    </ITEMTYPE> 

    <ITEMTYPE type="Z"> 
     <Color>Yellow</Color> 
     <Size>150</Size> 
    </ITEMTYPE> 

    </ITEMTYPES> 
</ROOT> 

にはどうすればITEMTYPEに対応して定義された各ITEM情報を提供XMLListModelのクエリを、作成することができますか?

私の素朴な試みがあった。

XmlListModel { 
    id: xmlModel 
    source: "test.xml" 
    query: "/ROOT/ITEMS/ITEM" 

    XmlRole { name: "type"; query: "@type/string()" } 
    XmlRole { name: "size"; query: "../../ITEMTYPES/Size/string()" } 
} 

もちろん動作しません。私は兄弟を参照する方法も知らず、対応するノードを参照する方法も知らず、ITEMITEMTYPEは同じ属性タイプを持っています。

答えて

3

条件を使用すると、predicatesをノードに参加させることができます。

それを試してみてください。

XmlListModel { 
    source: "..." 
    query: "//ITEMTYPES/ITEMTYPE[@type =//ITEMS/ITEM/@type]" 
    XmlRole { name: "col"; query: "Color/string()" } 
    XmlRole { name: "size"; query: "Size/string()" } 
} 
関連する問題