Qml 可从非子节点获取数据的XmlListModel查询

Qml 可从非子节点获取数据的XmlListModel查询,qml,qt5,qtquick2,Qml,Qt5,Qtquick2,在下面的XML文件中有项和项类型。 ITEMTYPES描述给定类型的项,items是这些类型的实例。ITEM与ITEMTYPE的关系是n:1 ITEM通过属性type引用ITEMTYPE: <ROOT> <ITEMS> <ITEM type="Z"/> <ITEM type="X"/> <ITEM type="Y"/> <ITEM type="X"/> <ITEM type=

在下面的XML文件中有
项类型
ITEMTYPES
描述给定类型的项,
items
是这些类型的实例。
ITEM
ITEMTYPE
的关系是
n:1

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>

这当然行不通。我既不知道如何引用同级,也不知道如何引用相应的节点,其中
ITEM
ITEMTYPE
具有相同的属性类型

您可以使用条件,即加入节点

试试看:

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