QT XmlListModel和Listview查看数据

时间:2014-02-14 16:12:04

标签: qt qml sailfish-os

我正在尝试解析xml并在程序中查看它:

<list>
    <item>
    This i want
    </item>
    <item>
    This i want 2 </item>
    <item>This i want</item>
    <item>This i want</item>
    <item>This i want</item>
    <item>This i want</item>
    <item/>
    <item/>
    <item/>
    </list>

使用像这样的XmlListModel和使用ListModel的视图:

XmlListModel {
            id: itemmodel
            source: page.dataURL
            query: "/list"

            XmlRole {
                name: "item"
                query: "item/string()"
            }
            }
  SilicaListView {
       width: 180; height: 300
       model: itemmodel
       delegate: Text { text: item }
   }

当我运行它时,Qt创建者说:“无法将[undefined]分配给QString”。 我做错了什么? 我正在向Sailfish制作应用程序,这个silicalistview与qt中的listview相同。 我的目标是像这样查看它们:

This I want
This I want 2

等等。

感谢您的时间!

1 个答案:

答案 0 :(得分:2)

我认为问题是您只有一个<list>元素,然后您的所有<item>都在同一个父级中。因此,您的查询正在查找XML中的每个<list>(仅一个),然后它只打印第一个<item>元素。

以下是一些代码更改应该有效的XmlRolequery。我将XML直接放入xml属性中以简化:

XmlListModel {
  id: itemmodel
  xml: "<list><item>This i want</item><item>This i want2</item></list>"
  query: "/list/item"
  XmlRole {
      name: "item"
      query: "string()"
  }
}
ListView {
   width: 180; height: 300
   model: itemmodel
   delegate: Rectangle {
     height: 40
     width: 100
     color:"red"
     Text {
       text: item
     }
   }
 }