在 Qt 中解析 XML 文件
Posted
技术标签:
【中文标题】在 Qt 中解析 XML 文件【英文标题】:Parse a XML file in Qt 【发布时间】:2011-03-06 18:19:42 【问题描述】:假设我有一个这样的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<name>
<id>1</id>
</name>
如何解析得到id
的值?
std::string id = ...;
【问题讨论】:
谷歌提供了这个链接:digitalfanatics.org/projects/qt_tutorial/chapter09.html。这对你有帮助吗? 【参考方案1】:我制作了@Scrivener 答案的简化版本。我没有从文件中读取,而是从 QString 变量中读取并删除了 continue;
块:
QString xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<name>\n"
" <id>1</id>\n"
"</name>\n";
QXmlStreamReader reader(xml);
while(!reader.atEnd() && !reader.hasError())
if(reader.readNext() == QXmlStreamReader::StartElement && reader.name() == "id")
qDebug() << reader.readElementText();
【讨论】:
【参考方案2】:这样的事情会起作用:
xmlFile = new QFile("xmlFile.xml");
if (!xmlFile->open(QIODevice::ReadOnly | QIODevice::Text))
QMessageBox::critical(this,"Load XML File Problem",
"Couldn't open xmlfile.xml to load settings for download",
QMessageBox::Ok);
return;
xmlReader = new QXmlStreamReader(xmlFile);
//Parse the XML until we reach end of it
while(!xmlReader->atEnd() && !xmlReader->hasError())
// Read next element
QXmlStreamReader::TokenType token = xmlReader->readNext();
//If token is just StartDocument - go to next
if(token == QXmlStreamReader::StartDocument)
continue;
//If token is StartElement - read it
if(token == QXmlStreamReader::StartElement)
if(xmlReader->name() == "name")
continue;
if(xmlReader->name() == "id")
qDebug() << xmlReader->readElementText();
if(xmlReader->hasError())
QMessageBox::critical(this,
"xmlFile.xml Parse Error",xmlReader->errorString(),
QMessageBox::Ok);
return;
//close reader and flush file
xmlReader->clear();
xmlFile->close();
【讨论】:
以上是关于在 Qt 中解析 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章