大家好,欢迎来到IT知识分享网。
step0:TinyXML的一些类
下面介绍TinyXML的一些类。在TinyXML中,根据XML的各种元素来定义了一些类:
- TiXmlBase:整个TinyXML模型的基类。
- TiXmlAttribute:对应于XML中的元素的属性。
- TiXmlNode:对应于DOM结构中的节点。
- TiXmlComment:对应于XML中的注释
- TiXmlDeclaration:对应于XML中的申明部分,<?versiong=“1.0” ?>。
- TiXmlDocument:对应于XML的整个文档。
- TiXmlElement:对应于XML的元素。
- TiXmlText:对应于XML的文字部分
- TiXmlUnknown:对应于XML的未知部分。
- TiXmlHandler:定义了针对XML的一些操作。
step1:环境配置
将TinyXml的几个文件放入到工程中:
并在cpp文件中加入#include “tinyxml.h”
step2:读取并加载xml文件
TiXmlDocument *myDocument = new XmlDocument(szFilePath);
// 最好要加个判断,以免出现未获取情况
if(myDocument == NULL || !myDocument->LoadFile())
{
cout<<"myDocument获取为空\n";
return -1;
}
step3:读取xml文件的节点
-
读取声明部分
先用FirstChild获取子节点,然后再用ToDeclaration转换为声明。另外,可以用Version和Encoding方法读取声明的版本号和编码方法。
TiXmlDeclaration *declaration = myDocument->FirstChild()->ToDeclaration(); // 判断是否读取成功 if (declaration == NULL) { cout<<"declaration获取为空\n"; return -2; } // 获取版本号和编码方法 cout<<"版本号:"<<declaration->Version()<<"\nencoding:"<<declaration->Encoding()<<endl;
xml文件为:
<?xml version="1.0" encoding="UTF-8" ?> <SetupInfo> <Product Name="360杀毒" Main="360sd.exe" NTMin="5.1" NTMax="6.2" Sys="32" Ver="4.2.0.4055" VerDesc="正式版" Pid="SD_HOME" Publisher="360安全中心" URL="http://sd.360.cn" /> ... </SetupInfo>
-
读取节点
利用FirstChild(valueName)方法读取节点,其类型为TiXmlNode。TiXmlNode *nodeRoot = myDocument->FirstChild("SetupInfo"); // 养成良好习惯,习惯性判断一下是否获取成功 if (nodeRoot == NULL) return -2;
-
读取元素
元素是里面包括很多属性的东西~1)先利用节点的ToElement方法转化为元素,
2)然后再利用**FirstChild(valueName)方法读取元素下面的节点,
3)最后利用ToElement()**方法转为元素类型。可以利用Attribute方法读取相关属性。
TiXmlElement *RootElement = nodeRoot->ToElement(); TiXmlElement *ProductElement = RootElement->FirstChild("Product")->ToElement(); // 或者直接用节点的方法 // TiXmlElement *ProductElement = nodeRoot->FirstChild("Product")->ToElement(); cout<<"product Main: "<<ProductElement->Attribute("Main")<<endl;
-
读取嵌套元素的属性
xml:
<Install> <Package ResID="501" Cab="360sdUI_New.cab" FileSize="0" Show="1" /> <Package ResID="503" Cab="savapi.cab" FileSize="0" Show="1" /> <Package ResID="504" Cab="360sdEng.cab" FileSize="0" Show="1"> ... <Exec Type="1" File="sdCheckDepVersion.dll" Name="IniSetEngine" /> <Exec Type="1" File="sdCheckDepVersion.dll" Name="ReduceBDtoAvira" /> <Exec Type="1" File="sdCheckDepVersion.dll" Name="IniSetRest" /> <Exec Type="1" File="sdCheckDepVersion.dll" Name="RegSetAll" /> </Package> <Package ResID="506" Cab="customskin4.cab" FileSize="0" Show="1" /> <Package ResID="510" Cab="360hips.cab" FileSize="0" Show="1" Platform="6.2" Condition="1"> <Exec Type="4" Name="Hips" /> <Exec Type="0" File="%install%\dep360.exe" Param="/shutdowntray" Wait="1" Display="正在安装木马防火墙..."/> </Package> </Install>
利用NextSiblingElement读取下个元素,所以只需要加个循环,再利用3.读取元素的方法即可读取嵌套元素的属性。
// 获取Install的Package的Exec属性 TiXmlElement *ProductElement = RootElement->FirstChild("Install")->ToElement(); TiXmlElement *PackageElement = InstallElement->FirstChildElement(); while(PackageElement) { cout<<"ResID = " << PackageElement->Attribute("ResID")<<endl; TiXmlElement *ExecElement = PackageElement->FirstChildElement(); while(ExecElement) { cout<<"Exec Type = " << ExecElement->Attribute("Type")<<endl; ExecElement = ExecElement->NextSiblingElement(); } PackageElement = PackageElement->NextSiblingElement(); }
step5:往XML文件里加东西
1)首先创建相关元素
2)然后利用函数LinkEndChild进行连接
3)最后利用该函数SaveFile保存文件
//创建一个XML的文档对象。
TiXmlDocument *myDocument = new TiXmlDocument();
//创建一个根元素并连接。
TiXmlElement *RootElement = new TiXmlElement("Persons");
myDocument->LinkEndChild(RootElement);
//创建一个Person元素并连接。
TiXmlElement *PersonElement = new TiXmlElement("Person");
RootElement->LinkEndChild(PersonElement);
//设置Person元素的属性。
PersonElement->SetAttribute("ID", "1");
//创建name元素、age元素并连接。
TiXmlElement *NameElement = new TiXmlElement("name");
TiXmlElement *AgeElement = new TiXmlElement("age");
PersonElement->LinkEndChild(NameElement);
PersonElement->LinkEndChild(AgeElement);
//设置name元素和age元素的内容并连接。
TiXmlText *NameContent = new TiXmlText("周星星");
TiXmlText *AgeContent = new TiXmlText("20");
NameElement->LinkEndChild(NameContent);
AgeElement->LinkEndChild(AgeContent);
//保存到文件
myDocument->SaveFile("要保存的xml文件名");
这样,便创建了一个如下的xml文件:
<Persons>
<Person ID="1">
<name>周星星</name>
<age>20</age>
</Person>
</Persons>
Document->SaveFile(“要保存的xml文件名”);
这样,便创建了一个如下的xml文件:
```xml
<Persons>
<Person ID="1">
<name>周星星</name>
<age>20</age>
</Person>
</Persons>
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25707.html