我要解析的XML是这样的:
<posts>
<post>
<id>1234</id>
<file_url>/foo/bar</file_url>
</post>
</posts>
现在,我需要为post
的每个孩子插入QVariantMap中的标记名称和内容,其中键是标记,内容(文本)是值。
此外,这是Web API返回的内容,因此我无法硬编码标记名称(除了&#34; post&#34;),因为结果可能会因调用的内容而异。< / p>
我的代码:
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();
}
}
}
然而,我只会得到&#34; id&#34;没有别的。据我从文档中理解,这是预期的行为,但这并不是我需要的。
如何仅获取<post>
和</post>
之间的标记?
答案 0 :(得分:2)
您需要告诉XML阅读器使用reader.readElementText()或者使用reader.skipCurrentElement()来移动到下一个元素,而不是使用reader.text(),如果元素不是您正在查找的内容对
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.readElementText();
}
}
}
答案 1 :(得分:0)
您可以使用 QXmlStreamWriter 类和 writeCurrentToken
方法来获取输入 XML。例如以下提取直到结束 </post>
文本:
QXmlStreamReader reader;
reader.addData(data);
QString outerXml;
QXmlStreamWriter writer(&outerXml);
while (!reader.isEndElement()
|| reader.name() != "post")
{
writer.writeCurrentToken(mXmlReader);
reader.readNext();
}
writer.writeCurrentToken(reader);
来自 Qt 文档:
<块引用>void QXmlStreamWriter::writeCurrentToken(const QXmlStreamReader &reader)
写入读取器的当前状态。所有可能的有效 支持状态。
这个函数的目的是支持XML的链式处理 数据。