版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq78442761/article/details/82786458
目录
官方解析
QXmlStreamReader::qualifiedName()
返回StartElement或EndElement的限制名;
限制名是XML数据中元素的原始名称。他有一个前缀和一个后缀,后缀的元素叫本地名。因为名称空间的前缀不是唯一的(相同的前缀可以指不同的名称空间,不同的前缀可以指向相同的名称空间)这个时候就不该使用qualifiedName(),而应该使用namepaceUri()与attributs中的local name()。
博主例子
这里举个例子,当xml代码如下时
<?xml version="1.0" encoding="GBK"?>
<root>
<Node name="first Tree" text="hello"/>
<Tree name="Tree addition" text="how are you?" msg="how old are you?"/>
<Other xmlns:One="namespace">
<One:a name="One a"/>
<One:b name="One b"/>
</Other>
</root>
可以用如下代码进行解析(这里用打印来模型下):
#include <QXmlStreamReader>
#include <QApplication>
#include <QFile>
#include <QDebug>
int main(int argc, char *argv[])
{
QFile file("E:\\Qt2018\\qualifiedNameInXML\\my.xml");
if(!file.open(QFile::ReadOnly|QFile::Text)){
qDebug()<<"open failed!";
return 0;
}
QXmlStreamReader reader;
reader.setDevice(&file);
while(!reader.atEnd()){
reader.readNext();
if(reader.name().toString()=="Node"){
qDebug()<<reader.attributes().value("name").toString();
qDebug()<<reader.attributes().value("text").toString();
}
else if(reader.prefix().toString()=="One"){
qDebug()<<reader.qualifiedName();
qDebug()<<reader.attributes().value("name").toString();
qDebug()<<reader.attributes().value("text").toString();
qDebug()<<reader.attributes().value("msg").toString();
}
}
file.close();
return 0;
}
程序运行截图如下: