2010-08-24 4 views
1

Получать строку, как это:Как получить значения дочерних узлов с QDomDocument?

<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 был пуст. Что я здесь делаю неправильно?

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

ответ

7

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

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

Эта функция возвращает 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 рассчитывать, что ин dex находится в пределах.

+0

'item' - это то же самое, что' at'. –

+2

3.3 является ... древним :) –

0

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

Смежные вопросы