文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++、Qt分别读写xml文件的方法是什么

2023-07-05 09:06

关注

这篇“C++、Qt分别读写xml文件的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++、Qt分别读写xml文件的方法是什么”文章吧。

XML语法

第一行是XML文档声明,<>内的代表是元素,基本语法如以下所示。C++常见的是使用tiny库读写,Qt使用自带的库读写;

<?xml version="1.0" encoding="utf-8" standalone="yes" ?><根元素>   <元素 属性名="属性值" 属性名="属性值">Text</元素>   <元素 属性名="属性值" 属性名="属性值">       <子元素>Text</子元素>   </元素></根元素>

C++使用tinyxml读写xml

首先从网站下载tinyxml库,

将6个文件加载到自己的项目中:

C++、Qt分别读写xml文件的方法是什么

写XML:

新建文件并写入:

#include "include/tinyxml.h"string strPath = "E:/test.xml";TiXmlDocument *writeDoc = new TiXmlDocument; //xml文档指针//文档格式声明TiXmlDeclaration *decl = new TiXmlDeclaration("1.0", "UTF-8", "yes");writeDoc->LinkEndChild(decl); //写入文档//TiXmlElement父类的析构函数内自带delete,所以不用自己释放TiXmlElement *RootElement = new TiXmlElement("Camera");//根元素RootElement->SetAttribute("num", "3"); //属性writeDoc->LinkEndChild(RootElement);TiXmlElement *StuElement = new TiXmlElement("Exposure");//Stu//设置属性StuElement->SetAttribute("time", "A");StuElement->SetAttribute("deley", "30");RootElement->LinkEndChild(StuElement);//父节点写入文档//子元素TiXmlElement *sonElement1 = new TiXmlElement("max");StuElement->LinkEndChild(sonElement1);TiXmlText *maxContent = new TiXmlText("1000");sonElement1->LinkEndChild(maxContent);TiXmlElement *sonElement2 = new TiXmlElement("min");StuElement->LinkEndChild(sonElement2);TiXmlText *minContent = new TiXmlText("80");sonElement2->LinkEndChild(minContent);writeDoc->SaveFile(strPath.c_str());delete writeDoc;

最终生成的xml文件是:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><Camera num="3">    <Exposure time="A" deley="30">        <max>1000</max>        <min>80</min>    </Exposure></Camera>

所以,使用tinyxml函数库中的类去读写根元素,text和属性。这里主要用到的就是四个类和三个函数:

<TiXmlDeclaration><TiXmlElement>     <TiXmlElement>        <TiXmlElement>TiXmlText</TiXmlElement>     </TiXmlElement></TiXmlElement>

四个类:

三个函数:

读XML:

TiXmlDocument mydoc("E:/test.xml");if(!mydoc.LoadFile()){   return;}TiXmlElement *RootElement = mydoc.RootElement();   //获取根元素//遍历根元素下的元素for(TiXmlElement *StuElement = RootElement->FirstChildElement();//第一个子元素StuElement != NULL;StuElement = StuElement->NextSiblingElement())//下一个兄弟元素{        //先找到Exposure元素if (0 == strcmp("Exposure", StuElement->Value())){//遍历Exposure元素下的子元素for (TiXmlElement *sonElement = StuElement->FirstChildElement();     sonElement != NULL; sonElement = sonElement->NextSiblingElement()){//找到max元素,并输出元素内的textif (0 == strcmp("max", sonElement->Value())){string str = sonElement->GetText();cout << str.c_str() << endl;}}}}

C++、Qt分别读写xml文件的方法是什么

Qt读写xml

写XML:

//头文件#include <QDomDocument>QString fileName = "E:/test.xml";QFile file(fileName);if(!file.open(QIODevice::WriteOnly|QIODevice::Truncate))  return;//定义xml文件QDomDocument doc;//定义格式头QDomProcessingInstruction ins = doc.createProcessingInstruction("xml","version = \'1.0\' encoding = \'utf-8\'");//追加元素doc.appendChild(ins);//根节点元素QDomElement root = doc.createElement("Camera");doc.appendChild(root);//在根节点的基础上增加一个子节点QDomElement sonEmt = doc.createElement("Exposure");//创建元素的属性名QDomAttr sonAttr = doc.createAttribute("time");//创建元素的属性值sonAttr.setNodeValue("100");//节点和属性关联sonEmt.setAttributeNode(sonAttr);root.appendChild(sonEmt);//在根节点的基础上增加一个子节点,并设置子节点的textQDomElement sonOneEmt = doc.createElement("max");QDomText sonOneText = doc.createTextNode("1000");sonOneEmt.appendChild(sonOneText);sonEmt.appendChild(sonOneEmt);QDomElement sonTwoEmt = doc.createElement("min");QDomText sonTwoText = doc.createTextNode("80");sonTwoEmt.appendChild(sonTwoText);sonEmt.appendChild(sonTwoEmt);//写入文件QTextStream stream(&file);doc.save(stream,4);//4缩进

这里对应的类有:

<QDomProcessingInstruction><QDomElement>   <QDomElement>QDomText</QDomElement>   <QDomElement QDomAttr>   </QDomElement></QDomElement>

读XML:

#include <QXmlStreamReader>QDomDocument doc;QString fileName = "E:/test.xml";QFile file(fileName);if(!file.open(QIODevice::ReadOnly|QIODevice::Truncate)){    return;}else{    //将文件内容读到doc中    if(!doc.setContent(&file))        file.close();    //返回根元素    QDomElement root = doc.documentElement();    //返回根元素的名称    QDomNode n = root.firstChild();    while(!n.isNull())    {       if(n.isElement())       {         QDomElement e = n.toElement();         QString strXML = qPrintable(e.tagName());         //判断第一个节点         if("Exposure" == strXML)         {             //遍历寻找Exposure元素下的子元素,并找到其text             QDomNodeList list = e.childNodes();             for(int i=0;i<list.count();i++)             {                QDomNode node = list.at(i);                strXML = qPrintable(node.toElement().tagName());                //判断第二个元素                if(node.isElement() && "max"== strXML)                  QString textStr = qPrintable(node.toElement().text());//读取子元素内的text             }         }       }    }}

界面读取的效果为:

C++、Qt分别读写xml文件的方法是什么

以上就是关于“C++、Qt分别读写xml文件的方法是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯