Parse XmlHttpRequest to XmlListModel

夙愿已清 提交于 2019-12-08 01:06:27

问题


I want to get my retrieved xmlHttpRequest object into an XMLListModel. I am using qml. The main goal is to evaluate the xml I get and show the entries in a list. If there's a better method - let me know.

I found a "solution" here for analyzing the xml: http://developer.nokia.com/Community/Discussion/showthread.php/232839-Qt-Quick-and-DOM-doc-responseXML-returns-null and here Parse XML from XMLHttpRequest But it is VERY poor to dig in deep xml structures, because there are loops arround every level of the xml tree.

So the 2 ways I would like to have:

1: XmlList

This would be my favourite: parse the data I got from the xmlHttpRequest to a XmlList thing and get the list for free (automatically). This guy wanted the same, but didn't write out a solution: http://qt-project.org/forums/viewthread/6460

I also tried:

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

The first one separately, and the last line, where I get the xml. This says "Error: Cannot assign null to QString". I am sure, that I get a correct xml answer, because the above mentioned method with searching for each child and the tagname is working. Also I found a different notation with something like a parser, but that didn't work either.

2: XPath

var doc = new DOMParser().parseFromString(response, "text/xml"); returnes DOMParser not defined .. so I guess I would need some library there, but didn't find anything about the topic (else than unanswered questions). (Same with .getElementById and evaluateXPath and many other thing I found on the net)

Any hint is appreciated!


回答1:


The xml property of XmlListModel must be of type string. Therefore you have to assign xhr.responseText instead of xhr.responseXML. Here is a minimal working example (using a data URI so simulate a server response):

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();
    }
}


来源:https://stackoverflow.com/questions/19244672/parse-xmlhttprequest-to-xmllistmodel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!