XML parsing with QML XmlListModel

I am having trouble parsing an xml file using XmlListModel, this is an XML file

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:searchResponse xmlns:ns1="http://tempuri.org"> <return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="unnamed_struct_use_soapval[10]"> <item> <title xsi:type="xsd:string">Es Messi deportista del aΓ±o en Israel</title> <excerpt xsi:type="xsd:string">El grupo editorial.............</excerpt> <img xsi:type="xsd:string">http://www.noticiasmvs.com/media/fotos/9edd0407a7bd0a47df3ece7869678c4a.jpg</img> <url xsi:type="xsd:string">http://www.noticiasmvs.com/xmlapp/article.php?noticia_id=52872</url> <pubdate xsi:type="xsd:string">miΓ©rcoles 28 de diciembre de 2011, 03:01:54</pubdate> </item> <item> <title xsi:type="xsd:string">Primera ronda de los playoffs NBA</title> <excerpt xsi:type="xsd:string">Resultados de los partidos ya disputados y programa de los que restan por jugar de la primera ronda de los playoffs de la NBA</excerpt> <img xsi:type="xsd:string"> http://www.noticiasmvs.com/media/fotos/7b9e23b87817132e9a1771cad7de819d.jpg</img> <url xsi:type="xsd:string">http://www.noticiasmvs.com/xmlapp/article.php?noticia_id=4982</url> <pubdate xsi:type="xsd:string">viernes 30 de abril de 2010, 01:27:17</pubdate> </item> </return> </ns1:searchResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 

I am parsing it with this XmlListModel

 XmlListModel { query: "/SOAP-ENV/SOAP-ENV/ns1/return/item" id:searchParser XmlRole{ name: "title"; query: "title/string()"} XmlRole{ name: "excerpt"; query: "excerpt/string()"} XmlRole{ name: "img"; query: "img/string()"} XmlRole{ name: "url"; query: "url/string()"} XmlRole{ name: "pubdate"; query: "pubdate/string()"} 

}

at the end it returns the status is ready, but without elements in the model, what am I doing wrong?

+7
source share
1 answer

The query string is incorrect: you need to write the name of the element, including its namespace. The XPath expression should look like this:

 /SOAP-ENV:Envelope/SOAP-ENV:Body/ns1:searchResponse/return/item 

To use namespaces in a query, you must declare them as in XQuery. Here is an example:

 import QtQuick 1.1 Rectangle { XmlListModel { id: searchParser source: "data.xml" // contains XML content query: "/SOAP-ENV:Envelope/SOAP-ENV:Body/ns1:searchResponse/return/item" namespaceDeclarations: "declare namespace SOAP-ENV = 'http://schemas.xmlsoap.org/soap/envelope/'; declare namespace ns1 = 'http://tempuri.org';" XmlRole { name: "title"; query: "title/string()" } XmlRole { name: "excerpt"; query: "excerpt/string()" } XmlRole { name: "img"; query: "img/string()" } XmlRole { name: "url"; query: "url/string()" } XmlRole { name: "pubdate"; query: "pubdate/string()" } onCountChanged: console.log("count:", count) } } 
+9
source

All Articles