1. 程式人生 > >Qt工作筆記-Qt文件閱讀筆記-QXmlStreamReader::qualifiedName()如何解析帶限制符的XML

Qt工作筆記-Qt文件閱讀筆記-QXmlStreamReader::qualifiedName()如何解析帶限制符的XML

目錄

官方解析

博主例子

官方解析

QXmlStreamReader::qualifiedName() 返回StartElement或EndElement的限制名; 限制名是XML資料中元素的原始名稱。他有一個字首和一個字尾,字尾的元素叫本地名。因為名稱空間的字首不是唯一的(相同的字首可以指不同的名稱空間,不同的字首可以指向相同的名稱空間)這個時候就不該使用qualifiedName(),而應該使用namepaceUri()與attributs中的local name()。  

博主例子

如下面的xml,如何解析帶":"這個符號的xml

xml原始碼如下:

<?xml version="1.0" encoding="GBK"?>

<root>
	<Node name="first Tree" text="hello"/>
	<Tree:name name="Tree addition" text="how are you?" msg="how old are you?"/>
</root>

Qt原始碼如下:

main.cpp

#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.qualifiedName().toString()=="Tree:name"){
            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;
}

執行截圖如下: