Как получить значения дочерних узлов с помощью QDomDocument?
Вопрос
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
было пусто.Что я здесь делаю не так?
Заранее благодарю.
Решение
Таким образом, очевидно, что текст внутри узла тоже является самим узлом.Вот как это работает:
QString argument(int index)
{
QDomNode arg = xml->firstChild().namedItem("arguments");
return arg.childNodes().at(index).firstChild().nodeValue();
}
Другие советы
elementsByTagName() возвращает список всех узлов (фактически элементов) с именем тега "arguments" в поддереве узлов..at() возвращает один из этих элементов "аргументов" из списка, а не их дочерние элементы.Если вам нужны дочерние элементы, вам нужно выполнить итерацию по их соответствующим дочерним узлам().
Эта функция возвращает QDomNodList, из которого есть функция item для получения каждого узла (и количество, чтобы узнать, сколько их)
Исходя из этого, я бы сказал, что код, вероятно, должен быть
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 count, что индекс находится в пределах допустимых значений.