2010-07-15 19 views
5

Estoy desarrollando una aplicación que después de hacer un servicio web recibí la respuesta del servidor que está en la etiqueta XML.Cómo analizar una cadena XML en Qt

La respuesta:

<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n 
<string...... /\">Hello World</string> 

quiero leer solamente la cadena "Hola Mundo". ¿Cómo debo analizarlo?

Respuesta

18

Espero que esto ayude:

QByteArray xmlText; 
//Get your xml into xmlText(you can use QString instead og QByteArray) 
QDomDocument doc; 
doc.setContent(xmlText); 
QDomNodeList list=doc.elementsByName("string"); 
QString helloWorld=list.at(0).toElement().text(); 
1

probar esto ...!

QFile* file = new QFile(fileName); 
if (!file->open(QIODevice::ReadOnly | QIODevice::Text)) 
{ 
    QMessageBox::critical(this, "QXSRExample::ReadXMLFile", "Couldn't open xml file", QMessageBox::Ok); 
    return; 
} 

QXmlStreamReader xml(file); 
QXmlStreamReader::TokenType token; 
while(!xml.atEnd() && !xml.hasError()) 
{ 
    /* Read next element.*/ 
    token = xml.readNext(); 
    /* If token is just StartDocument, we'll go to next.*/ 
    if(token == QXmlStreamReader::StartDocument) 
     continue; 


if(token == QXmlStreamReader::Characters) 
    QMessage::information(this,"all text", xml.text().toString()); 
continue; 
} 
0

me escribió una envoltura simple en algunas clases QDom * que hace que trabajar con XML en Qt más fácil.

Por ejemplo:

myxmlmap->$("tagnameq1")->$("tagname2.")->$("@attrname=attrvalue*").c.length() 

O incluso de esa manera:

myxmlmap->$("tagname1>tagname2.>@attrname=attrvalue*").c.at(2).e.text() 

"*" - todos los niños en el árbol desde el nodo actual. "." - solo los niños de 1ra generación. elemento de nodo electrónico. c - lista de hijos del nodo. todos los niños encontrados también se almacenan en el atributo "c".