查询可以从非子节点获取数据的 XmlListModel
Query for XmlListModel which could get data from not child-nodes
下面的XML文件中有ITEMS
和ITEMTYPES
。
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>
如何为 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
具有相同的属性类型。
您可以使用条件,即 predicates 加入节点。
试试看:
XmlListModel {
source: "..."
query: "//ITEMTYPES/ITEMTYPE[@type =//ITEMS/ITEM/@type]"
XmlRole { name: "col"; query: "Color/string()" }
XmlRole { name: "size"; query: "Size/string()" }
}
下面的XML文件中有ITEMS
和ITEMTYPES
。
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>
如何为 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
具有相同的属性类型。
您可以使用条件,即 predicates 加入节点。
试试看:
XmlListModel {
source: "..."
query: "//ITEMTYPES/ITEMTYPE[@type =//ITEMS/ITEM/@type]"
XmlRole { name: "col"; query: "Color/string()" }
XmlRole { name: "size"; query: "Size/string()" }
}