Qt/QML XmlListModel无法读取XML文件问题咨询
解决XmlListModel报错"Unsupported XML version"的问题
嘿,这个问题我之前也碰到过,其实就是Qt的XmlListModel对XML版本支持的限制在搞鬼,我来帮你搞定它:
问题出在哪?
你看到的Error FODC0002: Unsupported XML version错误,核心原因很简单:你的XML文件开头声明的是XML 1.1:
<?xml version="1.1" encoding="utf-8"?>
但Qt的XmlListModel依赖的QtXmlPatterns模块,目前只支持XML 1.0版本,完全不兼容XML 1.1的声明格式。
最快的修复方案
直接修改你的XML文件的版本声明,把version="1.1"改成version="1.0"就行,另外我还帮你补全了缺失的</rss>闭合标签(不然XML结构不完整也可能出问题):
<?xml version="1.0" encoding="utf-8"?> <rss version="2.0"> <channel> <item> <title>A blog post</title> <pubDate>Sat, 07 Sep 2010 10:00:01 GMT</pubDate> </item> <item> <title>Another blog post</title> <pubDate>Sat, 07 Sep 2010 15:35:01 GMT</pubDate> </item> </channel> </rss>
改完之后,你的原有QML代码不需要任何调整,点击MouseArea就能正常读取并输出item的标题内容了。
要是必须保留XML 1.1怎么办?
如果因为业务原因不能修改原XML文件的版本声明,那可以先手动读取文件内容,替换版本声明后再传给XmlListModel,给你写了个示例:
Window { visible: true width: 640 height: 480 XmlListModel{ id: xmlModel source: modifiedXmlContent query: "/rss/channel/item" XmlRole { name: "title"; query: "title/string()" } onStatusChanged: { console.log("Status Changed...." , status) console.log(errorString()) } } // 存储修改后的XML内容 property string modifiedXmlContent: "" Component.onCompleted: { var xhr = new XMLHttpRequest() xhr.open("GET", "Test.xml") xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { // 替换XML 1.1声明为1.0 modifiedXmlContent = xhr.responseText.replace(/<\?xml version="1.1"/, '<?xml version="1.0"') } } xhr.send() } MouseArea{ anchors.fill: parent onClicked: { console.log(xmlModel.count) for(var i = 0 ; i < xmlModel.count ; i++) { var name = xmlModel.get(i).title console.log(name) } } } }
内容的提问来源于stack exchange,提问作者Prasoon
相关产品推荐
相关产品推荐

