TinyXml使用[亲测有效]

TinyXml使用[亲测有效]step0:TinyXML的一些类下面介绍TinyXML的一些类。在TinyXML中,根据XML的各种元素来定义了一些类:TiXmlBase:整个TinyXML模型的基类。TiXmlAttribute:对应于XML中的元素的属性。TiXmlNode:对应于DOM结构中的节点。TiXmlComment:对应于XML中的注释TiXmlDeclaration:对应于XML中的申明部分,&l…

大家好,欢迎来到IT知识分享网。

step0:TinyXML的一些类

下面介绍TinyXML的一些类。在TinyXML中,根据XML的各种元素来定义了一些类:

  1. TiXmlBase:整个TinyXML模型的基类。
  2. TiXmlAttribute:对应于XML中的元素的属性。
  3. TiXmlNode:对应于DOM结构中的节点。
  4. TiXmlComment:对应于XML中的注释
  5. TiXmlDeclaration:对应于XML中的申明部分,<?versiong=“1.0” ?>。
  6. TiXmlDocument:对应于XML的整个文档。
  7. TiXmlElement:对应于XML的元素。
  8. TiXmlText:对应于XML的文字部分
  9. TiXmlUnknown:对应于XML的未知部分。
  10. 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文件的节点

  1. 读取声明部分

    先用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>
    

  2. 读取节点
    利用FirstChild(valueName)方法读取节点,其类型为TiXmlNode

    TiXmlNode *nodeRoot = myDocument->FirstChild("SetupInfo");
    
    // 养成良好习惯,习惯性判断一下是否获取成功
    if (nodeRoot == NULL)
    	return -2;
    
  3. 读取元素
    元素是里面包括很多属性的东西~

    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;
    
  4. 读取嵌套元素的属性

    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

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信