c/c++语言开发共享Qt利用DOM类实现读取xml文件

一、项目介绍利用dom相关类读取xml文件。dom(document object model,即文档对象模型)把xml文档转换成应用程序可以遍历的树形结构,这样便可以随机访问其中的节点。它的缺点是需

一、项目介绍

利用dom相关类读取xml文件。

dom(document object model,即文档对象模型)把xml文档转换成应用程序可以遍历的树形结构,这样便可以随机访问其中的节点。它的缺点是需要将整个xml文档读入内存,消耗内存较多。

在qt中使用qdomprocessinginstruction类来表示xml说明,元素对应qdomelement类,属性对应qdomattr类,文本内容由qdomtext类表示。所有的dom节点,比如这里的说明、元素、属性和文本等,都使用qdomnode类来表示,然后使用对应的isprocessinginstruction()、iselement()、isattr()和istext()等函数来判断是否是该类型的元素,如果是,那么就可以使用toprocessinginstruction()、toelement()、toattr()和totext()等函数转换为具体的节点类型。

二、项目基本配置

新建一个qt案例,项目名称为“domtest”,基类选择“qwidget”,取消创建ui界面复选框的选中状态,完成项目创建。

三、ui界面设计

无ui界面

四、主程序实现

4.1 node.xml

新建一个xml文件,内容为:

<?xml version="1.0" encoding="utf-8"?>      <archive>          <car id="1">              <attrib number="01" >排量:2393ml</attrib>              <attrib number="02" >价格:43.26万元</attrib>          </car>          <car id="2" >              <attrib number="01" >排量:1600ml</attrib>              <attrib number="02" >价格:8.98万元</attrib>          </car>          <car id="3" >              <attrib number="01" >排量:1600ml</attrib>              <attrib number="02" >价格:11.25万元</attrib>          </car>          <car id="4" >              <attrib number="01" >排量:1997ml</attrib>              <attrib number="02" >价格:15.38万元</attrib>          </car>      </archive>  

4.2 pro文件

在domtest.pro文件中添加如下代码:

qt+=xml  

4.3 main.cpp

核心代码如下:

    //新建qdomdocument类对象,它代表一个xml文档      qdomdocument doc;      //建立指向“node.xml”文件的qfile对象      qfile file("node.xml");      //以只读方式打开      if(!file.open(qiodevice::readonly))      {          qdebug()<<"无法打开";          return 0;      }      //将文件内容读到doc中      qstring errormsg;      if(!doc.setcontent(&file,&errormsg))           {              qdebug()<<errormsg;//如果读取出错则返回错误类型              file.close();              return 0;          }      //关闭文件      file.close();      //获得doc的第一个节点,即xml说明      qdomnode firstnode=doc.firstchild();      //输出xml说明      qdebug()<<firstnode.nodename();      qdebug()<<firstnode.nodevalue();  

运行结果:

“xml”
“version=‘1.0’ encoding=‘utf-8’”

如果不希望看到引号,可以进行如下修改:

qdebug() << qprintable(firstnode.nodename());  qdebug()<< qprintable(firstnode.nodevalue());  

运行结果:

xml
version=‘1.0’ encoding=‘utf-8’

查找id节点及其对应的名称:

   //如果节点不为空     while(!n.isnull())     {        if(n.iselement())  //如果节点是元素        {           qdomelement e=n.toelement();//将其转换为元素           qdebug()<<e.tagname();//返回元素标记           qdebug()<<e.attribute("id");//返回元素id属性的值         }           n=n.nextsibling();  //下一个兄弟节点     }  

运行结果:

“car”
“1”
“car”
“2”
“car”
“3”
“car”
“4”

输出所有子节点的内容:

   //如果节点不为空     while(!n.isnull())     {        if(n.iselement())  //如果节点是元素        {           qdomelement e=n.toelement();//将其转换为元素           qdomnodelist list=e.childnodes(); // 获得元素e的所有子节点的列表           // 遍历该列表           for(int i=0;i<list.count();i++)           {              qdomnode node=list.at(i);              if(node.iselement())                 qdebug()<<node.toelement().tagname();                 qdebug()<<node.toelement().text();           }  ​​​​​​​         }           n=n.nextsibling();  //下一个兄弟节点     }  

这里使用了childnodes()函数获得了元素所有子节点的列表,然后通过遍历这个列表实现了遍历其所有子元素。运行结果:

“attrib”
“排量:2393ml”
“attrib”
“价格:43.26万元”
“attrib”
“排量:1600ml”
“attrib”
“价格:8.98万元”
“attrib”
“排量:1600ml”
“attrib”
“价格:11.25万元”
“attrib”
“排量:1997ml”
“attrib”
“价格:15.38万元”

五、效果演示

完整结果如下:

Qt利用DOM类实现读取xml文件

到此这篇关于qt利用dom类实现读取xml文件的文章就介绍到这了,更多相关qt读取xml文件内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多c/c++开发分享Qt利用DOM类实现读取xml文件,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/1237819.html

(0)
上一篇 2022年9月10日
下一篇 2022年9月10日

精彩推荐