Pregunta

A recibiera una cadena como esta:

<invoke name="CanClose" returntype="xml">
   <arguments>
       <string># 998.40</string>
       <number>49920</number>
   </arguments>
</invoke>

Me gustaría utilizar QDomDocument para obtener los valores de los nodos secundarios por los argumentos de su índice (me gustaría extraer las cadenas '# 998.40' y '49920' en el ejemplo).

Esto es lo que he intentado:

QString argument(int index)
{
    QDomNode arg = xml->elementsByTagName("arguments").at(index);
    return arg.nodeValue();
}

Pero arg aún estaba vacío. ¿Qué estoy haciendo mal aquí?

Gracias de antemano.

¿Fue útil?

Solución

Así que al parecer el texto dentro de un nodo es un nodo en sí, también. Así es como funciona:

QString argument(int index)
{
    QDomNode arg = xml->firstChild().namedItem("arguments");
    return arg.childNodes().at(index).firstChild().nodeValue();
}

Otros consejos

elementsByTagName () devuelve una lista de todos los nodos (elementos en realidad) con el nombre de etiqueta "argumentos" en el subárbol nodos. .at () devuelve uno de esos "argumentos" elementos de la lista, y no sus hijos. Si desea que los niños, es necesario iterar sobre sus respectivos childNodes ().

Esta función devuelve una QDomNodList de la cual no es una función de modelo para tener cada nodo (y un recuento para saber cuántos hay)

A partir de este, diría que el código debe ser probablemente

http://doc.trolltech.com/3.3/qdomdocument.html#elementsByTagName

http://doc.trolltech.com/3.3/qdomnodelist.html#item

QString argument(int index) 
{ 
    QDomNode arg = xml->elementsByTagName("arguments").item(index); 
    return arg.nodeValue(); 
}

Probablemente debe verificar mediante el recuento NodeList que el índice está dentro de los límites.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top