QML读取本地XML文件

仿照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. 如果读取成树形结构的数据?

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值