Come ottenere i valori di nodi figlio con QDomDocument?
Domanda
Un riceve una stringa come questa:
<invoke name="CanClose" returntype="xml">
<arguments>
<string># 998.40</string>
<number>49920</number>
</arguments>
</invoke>
Mi piacerebbe usare QDomDocument
per ottenere i valori dei nodi figlio argomenti per il loro indice (vorrei estrarre le stringhe '# 998,40' e '49920' nell'esempio).
Questo è quello che ho provato:
QString argument(int index)
{
QDomNode arg = xml->elementsByTagName("arguments").at(index);
return arg.nodeValue();
}
Ma anche arg
era vuoto. Che cosa sto facendo male qui?
Grazie in anticipo.
Soluzione
Quindi, a quanto pare il testo all'interno di un nodo è un nodo stesso, anche. Ecco come funziona:
QString argument(int index)
{
QDomNode arg = xml->firstChild().namedItem("arguments");
return arg.childNodes().at(index).firstChild().nodeValue();
}
Altri suggerimenti
elementsByTagName () restituisce un elenco di tutti i nodi (gli elementi in realtà) con il nome tag "argomenti" nei nodi sotto-albero. .at () restituisce uno di questi "argomenti" elementi della lista, non i loro figli. Se si desidera che i bambini, è necessario iterare i rispettivi childNodes ().
Questa funzione restituisce una QDomNodList da cui si gode una funzione di voce per ottenere ogni nodo (e un conteggio per sapere quanti ce ne sono)
Da questo direi che il codice probabilmente dovrebbe essere
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();
}
Probabilmente dovrebbe controllare utilizzando il conteggio NodeList che l'indice è entro certi limiti.