版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/82787514
今天解析一个xml,是有问题的xml,这里模拟下
xml如下,没有声明名称空间却使用了名称空间
<?xml version="1.0" encoding="GBK"?>
<root>
<Node name="first Tree" text="hello"/>
<Node name="Tree addition" text="how are you?"/>
<One:a name="One a"/>
<One:b name="One b"/>
</root>
在Qt中使用QXmlStreamReader是有提示的
因此,要写一个健壮性的程序,就不得不看官方文档,
更具这篇文档,写了个有健壮性的程序
源码如下:
main.cpp
#include <QXmlStreamReader>
#include <QApplication>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
QFile file("E:\\Qt2018\\ProperUsageXMLReader\\my.xml");
if(!file.open(QFile::ReadOnly|QFile::Text)){
qDebug()<<"open failed!";
return -1;
}
QXmlStreamReader reader;
reader.setDevice(&file);
while(!reader.atEnd()){
reader.readNext();
if(reader.name().toString()=="Node"){
qDebug()<<"Node name: "<<reader.attributes().value("name").toString();
qDebug()<<"Node text:"<<reader.attributes().value("text").toString();
}
/*
* do processing
*/
if(reader.hasError()){
qDebug()<<"the error is "<<reader.errorString();
file.close();
Q_ASSERT(!"xml file has error");
}
}
file.close();
return 0;
}
错误的XML文件,或者解析失败的XML文件,运行截图如下:
如果是正确的xml文件,
xml源码如下:
<?xml version="1.0" encoding="GBK"?>
<root>
<Node name="first Tree" text="hello"/>
<Node name="Tree addition" text="how are you?"/>
<Other xmlns:One="namespace">
<One:a name="One a"/>
<One:b name="One b"/>
</Other>
</root>
运行截图如下: