QmlBook in chinese 编程之十四 ---(XML模型(A Model from XML))

XML模型(A Model from XML)

     由于XML是一种常见的数据格式,QML提供了XmlListModel元素来包装XML数据。这个元素能够获取本地或者网络上的XML数据,然后通过XPath解析这些数据。
     下面这个例子展示了从RSS流中获取图片,源属性(source) 引用了一个网络地址,这个数据会自动下载。

   上图只是为了看效果,对应代码图片是通过程序中下载下来然后在,显示,你就看到有些是比较慢。流畅度是gif我删除了很多,显示的成果。

       当数据下载完成后,它会被加工作为模型的子项。查询属性(query) 是一个XPath代理的基础查询,用来创建模型项。在这个例子中,这个路径是/rss/channel/item,所以,在一个模型子项创建后,每一个子项的标签,都包含了一个频道标签,包含一个RSS标签。
      每一个模型项,一些规则需要被提取,由XmlRole元素来代理。每一个规则都需要一个名称,这样代理才能够通过属性绑定来访问。每个这样的属性的值都通过XPath查询来确定。例如标题属性(title) 符合title/string()查询,返回内容中在之间的值。
      图像源属性(imageSource) 更加有趣,因为它不仅仅是从XML中提取字符串,也需要加载它。在流数据的支持下,每个子项包含了一个图片。使用XPath的函数substring-after与substring-before,可以提取本地的图片资源。这样imageSource属性就可以直接被作为一个Image元素的source属性使用。

代码部分:

import QtQuick 2.0
import QtQuick.XmlListModel 2.0
import "../common"
Background {
    width: 300
    height: 480

    Component{
        id:imageDelegate

        Box{
            width: listView.width
            height: 220
            color: '#333'

            Column {
                Text {
                    text: title
                    color: '#e0e0e0'
                }
                Image {
                    width: listView.width
                    height: 200
                    fillMode: Image.PreserveAspectCrop
                    source: imageSource
                }
            }
        }
    }


    XmlListModel{
        id:imageModel
        source: "https://www.nasa.gov/rss/dyn/image_of_the_day.rss"
        query: "/rss/channel/item"  //查询
        XmlRole{name:"title"; query: "title/string()"}
        XmlRole{name:"imageSource"; query:"enclosure/string(@url)"}
    }

    ListView{
        id: listView
        anchors.fill: parent
        model: imageModel
        delegate: imageDelegate
    }
}

本代码是qml book 中的书中的代码,详细请看对应书籍,喜欢我博客的同学可以关注哟。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值