2

我想将检索到的 xmlHttpRequest 对象放入 XMLListModel。我正在使用 qml。主要目标是评估我获得的 xml 并在列表中显示条目。如果有更好的方法 - 让我知道。

我在这里找到了一个用于分析 xml 的“解决方案”:http: //developer.nokia.com/Community/Discussion/showthread.php/232839-Qt-Quick-and-DOM-doc-responseXML-returns-null 在这里Parse来自 XMLHttpRequest 的 XML 但是深入挖掘 xml 结构非常糟糕,因为 xml 树的每一层都有循环。

所以我想要的两种方式:

1:XmlList

这将是我最喜欢的:将我从 xmlHttpRequest 获得的数据解析为 XmlList 事物并免费(自动)获取列表。这家伙想要同样的,但没有写出解决方案:http: //qt-project.org/forums/viewthread/6460

我也试过:

XmlListModel{id: xmlModel}
...
xmlModel.xml = xhr.responseXML;

第一个单独,最后一行,我得到 xml。这表示“错误:无法将 null 分配给 QString”。我敢肯定,我得到了正确的 xml 答案,因为上面提到的搜索每个孩子和标记名的方法是有效的。我还发现了一个不同的符号,比如解析器,但这也不起作用。

2:XPath

var doc = new DOMParser().parseFromString(response, "text/xml"); 返回未定义的 DOMParser .. 所以我想我需要一些库,但没有找到关于该主题的任何内容(除了未回答的问题)。(与 .getElementById 和 evaluateXPath 以及我在网上找到的许多其他东西相同)

任何提示表示赞赏!

4

1 回答 1

1

xml属性XmlListModel必须是字符串类型。因此,您必须分配xhr.responseText而不是xhr.responseXML. 这是一个最小的工作示例(使用数据 URI 模拟服务器响应):

import QtQuick 1.0

ListView {
    width: 200; height: 200

    delegate: Text {
        text: name 
    }

    model: XmlListModel {
        id: xmlModel
        query: "/names/name"

        XmlRole { name: "name"; query: "string()" }
    }

    Component.onCompleted: {
        /*  <names>
                <name>John</name>
                <name>Max</name>
                <name>Sandy</name>
            </names> */
        var dataURI = "data:application/xml;base64,PG5hbWVzPjxuYW1lPkpvaG48L25hbWU+PG5hbWU+TWF4PC9uYW1lPjxuYW1lPlNhbmR5PC9uYW1lPjwvbmFtZXM+"

        var req = new XMLHttpRequest();
        req.onreadystatechange = function () {
            if (req.readyState == 4) {
                xmlModel.xml = req.responseText; //<<<
            }
        };
        req.open("get", dataURI, true);
        req.send();
    }
}
于 2013-10-08T19:11:56.750 回答