Comment obtenir des valeurs de nœuds enfants avec QDomDocument?
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.
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.