Моего XML разобрать что-то вроде этого:QXmlStreamReader (Qt5): получить все вложенные элементы внутри тега
<posts>
<post>
<id>1234</id>
<file_url>/foo/bar</file_url>
</post>
</posts>
Теперь мне нужно вставить, для каждых детей post
, его имени тега и содержания в QVariantMap, где ключ является тегом, а содержимое (текст) - это значение.
Кроме того, это то, что возвращает веб-API, поэтому I не может имена тегов hardcode (кроме «post»), поскольку результаты могут различаться в зависимости от того, какой вызов выполнен.
Мой код:
QXmlStreamReader reader;
reader.addData(data); // data is a QByteArray obtained from the API call
while(reader.readNextStartElement()) {
qDebug() << reader.name();
if (reader.name() == "post") {
while(reader.readNextStartElement()) {
qDebug() << reader.name() << reader.text();
}
}
}
Что происходит, однако, что я получаю только "ID" и больше ничего. Насколько я понимаю из документации, это ожидаемое поведение, которое, однако, не то, что мне нужно.
Что мне делать, чтобы получить только теги между <post>
и </post>
?
Я мог бы, если это будет необходимо, но я не хочу жёстко ищу тег, как я только что привел один пример, который использует «пост», но есть и другие, с различным субом-тегами. Мне нужно сделать это «пулеметный стиль», получив все возможные теги между началом и концом. EDIT: Я также заметил, что это останавливается при первом «id». – Einar
В этом случае просто сделайте то, что вы делаете, но замените reader.text() на reader.readElementText(), отредактированный выше » –
Ваша последняя версия работает. Благодаря! – Einar