Qt DOM读写XML文件

QXmlStreamReader:一种快速的基于流的方式访问良格式 XML 文档,特别适合于实现一次解析器(所谓“一次解析器”,可以理解成我们只需读取文档一次,然后像一个遍历器从头到尾一次性处理 XML 文档,期间不会有反复的情况,也就是不会读完第一个标签,然后读第二个,读完第二个又返回去读第一个,这是不允许的);
DOM(Document Object Model):将整个 XML 文档读入内存,构建成一个树结构,允许程序在树结构上向前向后移动导航,这是与另外两种方式最大的区别,也就是允许实现多次解析器(对应于前面所说的一次解析器)。DOM 方式带来的问题是需要一次性将整个 XML 文档读入内存,因此会占用很大内存;
SAX(Simple API for XML):提供大量虚函数,以事件的形式处理 XML 文档。这种解析办法主要是由于历史原因提出的,为了解决 DOM 的内存占用提出的(在现代计算机上,这个一般已经不是问题了)。

XML文件如下:

<?xml version='1.0' encoding='UTF-8'?>
<china>
    <beijing>
        <haidian>
            <university>
                <peking>
                    <cs>
                        <name>奥巴马</name>
                    </cs>
                </peking>
            </university>
        </haidian>
    </beijing>
</china>

 Qt解析代码如下:

    QDomDocument doc;
    QDomElement root;

    QString filename = "D:\\Qt Projects\\TestXML_1\\demo.xml";
    QFile file(filename);

    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QMessageBox::critical(this, "文件打开失败", QString("不能打开文件:%1").arg(filename));
        return;
    }

    QString error;
    int errrow, errcol;

    if(!doc.setContent(&file, false, &error, &errrow, &errcol))
    {
        QMessageBox::critical(this, "文件解析失败",
                              QString("解析错误行:%1, 列:%2:%3")
                              .arg(errrow)
                              .arg(errcol)
                              .arg(error));
        file.close();
        return;
    }

    root = doc.documentElement();
    file.close();

    QString path = "china/beijing/haidian/university/peking/cs/name";

    QStringList strlist = path.split("/");
    QDomElement element = root;
    for(int i=1; i<strlist.count(); i++)
    {
        element = element.firstChildElement(strlist.at(i));
    }
    qDebug() << element.nodeName() << "\t" << element.text();

运行结果:

22:58:14: Starting D:\Qt Projects\build-TestXML_1-Desktop_Qt_6_0_3_MinGW_64_bit-Debug\debug\TestXML_1.exe ...
"name" 	 "奥巴马"
22:58:17: D:\Qt Projects\build-TestXML_1-Desktop_Qt_6_0_3_MinGW_64_bit-Debug\debug\TestXML_1.exe exited with code 0

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值