Как получить значения дочерних узлов с помощью QDomDocument?

StackOverflow https://stackoverflow.com/questions/3558339

  •  01-10-2019
  •  | 
  •  

Вопрос

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, что индекс находится в пределах допустимых значений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top