×
Namespaces

Variants
Actions

如何用QML获取XML标签的属性

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

代码示例
兼容于
平台:
Symbian

文章
hozhou 在 16 Mar 2011 创建
最后由 hamishwillee 在 13 Jun 2012 编辑


Contents

引言

QML script 支持 XMLHttpRequest 对象,我们可以使用它从网络上异步地获取数据。Qt文档中对XMLHttpRequest 的介绍很少,其自带的 XMLHttpRequest 例子也只是介绍了其一部分用法,并没有介绍如何获取XML标签的属性。本文就为大家简要介绍一下这方面的知识。

主要代码分析

        MouseArea {
id: mouseArea
anchors.fill: parent
onClicked: {
log.text = ""
console.log("\n")
 
var doc = new XMLHttpRequest();
doc.onreadystatechange = function() {
if (doc.readyState == XMLHttpRequest.HEADERS_RECEIVED) {
//showRequestInfo("Headers -->");
//showRequestInfo(doc.getAllResponseHeaders ());
//showRequestInfo("Last modified -->");
//showRequestInfo(doc.getResponseHeader ("Last-Modified"));
} else if (doc.readyState == XMLHttpRequest.DONE) {
var a = doc.responseXML.documentElement;
for (var ii = 0; ii < a.childNodes.length; ++ii) {
showRequestInfo("a.childNodes[" + ii + "].nodeName:" + a.childNodes[ii].nodeName);
var attr = a.childNodes[ii].attributes;
if(attr!=null) {
//following codes show how to get xml attributes
for (var j = 0; j < attr.length; ++j) {
showRequestInfo('attr[' + j + '].name=' + attr[j].name + ', attr[' + j + '].value=' + attr[j].value);
}
}
}
//showRequestInfo("Headers -->");
//showRequestInfo(doc.getAllResponseHeaders ());
//showRequestInfo("Last modified -->");
//showRequestInfo(doc.getResponseHeader ("Last-Modified"));
}
}
 
doc.open("GET", "data.xml");
//doc.open("GET", "http://api.flickr.com/services/feeds/photos_public.gne?format=rss2&tags=cat");
//doc.open("GET", "http://rss.sina.com.cn/edu/focus19.xml");
doc.send();
}
}


当区域被点击之后,我们首先创建了一个XMLHttpRequest,然后请求xml数据。当完全获取数据之后,我们首先取得responseXML的根节点。而后进行遍历。
a.childNodes[ii].attributes里并没有存放属性,具体属性的获取要通过 attr[j].value 。
参考:qdeclarativeglobalobject

还需要说明的一点是,为了使我们的qml程序能稳定地访问网络,那么们就需要为我们的qml程序设置一个NetworkAccessManager,这需要使用QDeclarativeEngine::setNetworkAccessManagerFactory()。当然我们也可以简单的使用系统默认设置:QNetworkProxyFactory::setUseSystemConfiguration(true); 详情见附件代码。



这里我们为了说明问题,采用了一个简单的静态本地xml文件——data.xml 。当然实际应用中我们通常会去网上动态地获取xml数据,见以上代码中注释掉的doc.open两行。
data.xml的内容如下:

<?xml version="1.0"?>
<note>
<to id="recipients" address="name@company.com">Jones</to>
<from>Jani</from>
</note>

程序输出分析

下面是程序的控制台输出:

a.childNodes[0].nodeName:#text
a.childNodes[1].nodeName:to
attr[0].name=id, attr[0].value=recipients
attr[1].name=address, attr[1].value=name@company.com
a.childNodes[2].nodeName:#text
a.childNodes[3].nodeName:from
a.childNodes[4].nodeName:#text

从以上输出明显可以看出XML文档的树形结构。 data.xml的根节点含有5个Node,其中Node1,和Node3分别对应data.xml中的 to 和 from标签。其中to 标签中含有两个属性,把它们都输出出来了。

这里补充说明一点:Node1又包含一个text的节点,其内容就是“Jones”。


下载例程

Media:QMLXmlHttpProperty.zip

Media:Simple微博客户端.zip

相关链接

This page was last modified on 13 June 2012, at 10:59.
253 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×