簡體   English   中英

將XmlHttpRequest解析為XmlListModel

[英]Parse XmlHttpRequest to XmlListModel

我想將檢索到的xmlHttpRequest對象放入XMLListModel中。 我正在使用qml。 主要目標是評估我得到的xml並將其顯示在列表中。 如果有更好的方法,請告訴我。

我在這里找到了用於分析xml的“解決方案”: http : //developer.nokia.com/Community/Discussion/showthread.php/232839-Qt-Quick-and-DOM-doc-responseXML-returns-null ,在這里進行了解析來自XMLHttpRequest的XML但深入研究xml結構非常糟糕,因為xml樹的每個級別周圍都有循環。

因此,我想擁有2種方式:

1:XmlList

這將是我的最愛:將我從xmlHttpRequest獲得的數據解析為XmlList事物,並免費(自動)獲得列表。 這個家伙想要一樣的東西,但是沒有寫出解決方案: http : //qt-project.org/forums/viewthread/6460

我也嘗試過:

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

分別是第一個和最后一行,從中獲取xml。 這表明“錯誤:無法為QString分配空值”。 我敢肯定,我得到了正確的xml答案,因為上述搜索每個孩子和標記名的方法都有效。 我也發現了類似解析器的不同記法,但是那也不起作用。

2:XPath

var doc = new DOMParser()。parseFromString(response,“ text / xml”); 返回未定義的DOMParser ..所以我想我在那里需要一些庫,但是沒有找到任何有關該主題的東西(比未回答的問題要多)。 (與.getElementById和valuateXPath以及我在網上發現的許多其他內容相同)

任何提示表示贊賞!

XmlListModelxml屬性必須為字符串類型。 因此,您必須分配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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM