在下面的XML文件中,有ITEMS
和ITEMTYPES
。
ITEMTYPES
描述给定类型的项目,ITEMS
是这些类型的实例。 ITEM
与ITEMTYPE
的关系为n:1
ITEM
通过属性ITEMTYPE
引用type
:
<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>
如何为XMLListModel
创建查询,该查询为每个ITEM
提供相应ITEMTYPE
中定义的信息?
我天真的尝试是:
XmlListModel {
id: xmlModel
source: "test.xml"
query: "/ROOT/ITEMS/ITEM"
XmlRole { name: "type"; query: "@type/string()" }
XmlRole { name: "size"; query: "../../ITEMTYPES/Size/string()" }
}
当然不起作用。我既不知道如何引用兄弟,也不知道如何引用相应的节点,ITEM
和ITEMTYPE
具有相同的属性类型。
答案 0 :(得分:3)
您可以使用条件predicates加入节点。
试试:
XmlListModel {
source: "..."
query: "//ITEMTYPES/ITEMTYPE[@type =//ITEMS/ITEM/@type]"
XmlRole { name: "col"; query: "Color/string()" }
XmlRole { name: "size"; query: "Size/string()" }
}