Как получить значения дочерних узлов с QDomDocument? - PullRequest
1 голос
/ 24 августа 2010

A получить строку, подобную этой:

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

Я хотел бы использовать QDomDocument, чтобы получить значения дочерних узлов аргументов по их индексу (я хотел бы извлечь строки "#998.40 "и" 49920 "в примере).

Вот что я попробовал:

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

Но даже arg было пусто.Что я здесь не так делаю?

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 26 августа 2010

Так что, очевидно, текст внутри узла тоже сам узел.Вот как это работает:

QString argument(int index)
{
    QDomNode arg = xml->firstChild().namedItem("arguments");
    return arg.childNodes().at(index).firstChild().nodeValue();
}
0 голосов
/ 25 августа 2010

elementsByTagName () возвращает список всех узлов (фактически элементов) с именем тега "arguments" в поддереве узлов. .at () возвращает один из этих «аргументов» элементов из списка, а не их потомков. Если вы хотите, чтобы дети, вам нужно перебрать их соответствующие childNodes ().

0 голосов
/ 24 августа 2010

Эта функция возвращает QDomNodList, из которого есть функция элемента, чтобы получить каждый узел (и счетчик, чтобы узнать, сколько их)

Из этого я бы сказал, что код, вероятно, должен быть

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

Вы, вероятно, должны проверить с помощью счетчика NodeList, что индекс находится в пределах границ.

...