C++、Qt分别读写xml文件的方法是什么(C++,qt,xml,开发技术)

时间:2024-05-06 10:05:00 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

XML语法

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

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

C++使用tinyxml读写xml

首先从网站下载tinyxml库,

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

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

写XML:

新建文件并写入:

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

最终生成的xml文件是:

<?xmlversion="1.0"encoding="UTF-8"standalone="yes"?><Cameranum="3"><Exposuretime="A"deley="30"><max>1000</max><min>80</min></Exposure></Camera>

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

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

四个类:

  • TiXmlDocument:定义一些基本的xml文件的基本操作,包含文件流;

  • TiXmlDeclaration:用于xml文件的第一行,定义xml文件的声明操作;

  • TiXmlElement:不管根元素,元素和子元素,都用此类;

  • TiXmlText:用于元素内的text的操作;

三个函数:

  • LinkEndChild:将子元素嵌在父元素内,还可以将text加到元素内

  • SetAttribute:设置元素内的属性名称与属性值

  • SaveFile:用于保存xml文件;如果xml文件不存在,会自动创建一个;

读XML:

TiXmlDocumentmydoc("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元素,并输出元素内的text if(0==strcmp("max",sonElement->Value())) { stringstr=sonElement->GetText(); cout<<str.c_str()<<endl; } } }}

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

Qt读写xml

写XML:

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

这里对应的类有:

<QDomProcessingInstruction><QDomElement><QDomElement>QDomText</QDomElement><QDomElementQDomAttr></QDomElement></QDomElement>

读XML:

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

界面读取的效果为:

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

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:C++、Qt分别读写xml文件的方法是什么的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Nginx反向代理后无法获取客户端真实IP地址怎么解决下一篇:

15 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18