2013-10-08 28 views
2

我想將我檢索到的xmlHttpRequest對象放入XMLListModel中。我正在使用qml。主要目標是評估我得到的xml並在列表中顯示條目。如果有更好的方法 - 讓我知道。將XmlHttpRequest解析爲XmlListModel

我發現了一個「解決方案」這裏分析的xml: http://developer.nokia.com/Community/Discussion/showthread.php/232839-Qt-Quick-and-DOM-doc-responseXML-returns-null 這裏 但它是非常差的深XML結構挖掘,因爲有角落找尋XML樹的每一個級別的循環。

所以2點的方法,我想有:

1:XMLList中

這將是我最喜歡的:解析我從XMLHttpRequest來一個的XMLList事情得到的數據,並獲取列表免費(自動)。 這傢伙想一樣,但沒有寫出來的解決方案: http://qt-project.org/forums/viewthread/6460

我也試過:

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

第一個分開,最後一行,在那裏我得到的XML。這說「錯誤:不能將null分配給QString」。我相信,我得到一個正確的XML答案,因爲上面提到的搜索每個孩子和標記名的方法正在工作。 另外,我發現了一個類似解析器的不同的表示法,但這也不起作用。

2:XPath的

變種DOC =新的DOMParser()parseFromString(響應, 「文本/ XML」); 回覆DOMParser未定義..所以我想我會需要一些庫,但沒有找到任何關於該主題(除未回答的問題)。 (與.getElementById和evaluateXPath以及我在網上找到的許多其他東西一樣)

任何提示都會被讚賞!

回答

1

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

謝謝,這個解決方案起初。但後來我碰到了邊界,查詢不能被嵌套或迭代。我需要一個有多個子條目(章節長度)的條目(即書)。據我所知。這是不可能的。所以我需要在一堆亂七八糟的循環中迭代來獲取數據。或者你知道另一種方式? I.e:使用沒有xmllistmodel的xpath? 因此,一個完整的解決方案可以生成一個數組,其中存儲頁數。 – mike

+0

錯誤是: 必需的基數是零或一(「?」);獲得一個或多個基數(「+」)。 – mike

+0

你可以創建'Repeater'的'ListView':外部'ListView'具有一個用於書籍的'XmlListModel',並且它的每個'Repeater'委託包含'XmlListModel'和一個生成的XPath表達式來選擇章節各自的書。 「Reapeater」的嵌套'XmlListModel'使用'ListView'的外部'XmlListModel'中的XML數據。 – hiddenbit