仿照Qt4.8的帮助文档
本地 XML 文件 path.xml
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<kind type="Hardcover" kinds = "ee" >图书</kind>
<item>
<title>nameA1 </title>
<title>nameA2 </title>
<title>nameA3 </title>
<pubDate>2012</pubDate>
<pubDate>2013</pubDate>
<pubDate>2014</pubDate>
</item>
<item>
<title>nameB</title>
<pubDate>2011</pubDate>
</item>
<kind type="Hardcover1" kinds = "ee" >音乐</kind>
<item>
<title>nameA</title>
<pubDate>2012</pubDate>
</item>
<item>
<title>nameB</title>
<pubDate>2011</pubDate>
</item>
</channel>
</rss>
数据模型 DataModel.qml
/*----------------------------------------------------------
读取本地XML数据,返回两个数据集
reload 不起作用
-------------------------------------------------------------*/
import QtQuick 1.0
Item {
property variant model: xmlModel
property variant model1: xmlModel1
property int status: xmlModel.status
function reload() { xmlModel.reload(); }
XmlListModel {
id: xmlModel
source: "../data/path.xml" //本地文件
query: "/rss/channel/item" //定位到查询的目录级
//如果title有多个值,取第二个值
//如果没有多个只,或对应的值没有那么多,title所有的数据都取不出
XmlRole { name: "name"; query: "title[2]/string()" }
//当数据模型reload()的时候,只有标记为“isKey”主键的才会重新加载
XmlRole { name: "date"; query: "pubDate[1]/string()"; isKey: true }
}
XmlListModel {
id: xmlModel1
source: "../data/path.xml"
query: "/rss/channel/kind"
XmlRole { name: "title"; query: "./string()" }
//@的含义是取属性
XmlRole { name: "type"; query: "@type/string()" }
}
}
页面显示 main.qml
import QtQuick 1.1
import "com" 1.0 as Com
Rectangle {
width: 360; height: 360
Com.DataModel { id:xmlModel }
Column {
ListView {
id:listv
width: 180; height: 50
model: xmlModel.model
delegate: Text { text: "no:" + index + name + ": " + date }
}
ListView {
id:listv1
width: 180; height: 50
model: xmlModel.model1
delegate: Text { text: "no:" + index + title + ":" + type }
}
Rectangle {
width: 180; height: 30
color: "red"
MouseArea {
anchors.fill: parent
onClicked: { xmlModel.reload() ;
console.log("reload xml")
}
}
}
}
}
问题:
1. 数据模型的reload()不起作用,不是web数据的原因?没有看。
2. 如果读取成树形结构的数据?