Question

A recieve une chaîne comme ceci:

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

Je voudrais utiliser QDomDocument pour obtenir les valeurs des nœuds enfants des arguments par leur index (je voudrais extraire les chaînes dans l'exemple « # 998,40 » et « 49920 »).

Voici ce que j'ai essayé:

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

Mais même arg était vide. Qu'est-ce que je fais mal ici?

Merci à l'avance.

Était-ce utile?

La solution

Donc, apparemment le texte à l'intérieur d'un nœud est un nœud lui-même, aussi. Voici comment cela fonctionne:

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

Autres conseils

elementsByTagName () retourne une liste de tous les noeuds (éléments en fait) avec le nom de tag « arguments » dans la sous-arborescence nœuds. .at () retourne un de ces éléments « arguments » de la liste, et non pas leurs enfants. Si vous voulez que les enfants, vous devez itérer sur leurs childNodes respectifs ().

Cette fonction retourne un QDomNodList à partir de laquelle il est une fonction de l'élément pour obtenir chaque nœud (et un compte de savoir combien il y a)

De cela, je dirais que le code devrait probablement être

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

Vous devriez probablement vérifier en utilisant le compte NodeList que l'indice est dans des limites.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top