加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

毕业论文中使用的XML读取和制造工具!!!C++ 使用TinyXML解析XM

发布时间:2020-12-16 09:15:38 所属栏目:百科 来源:网络整理
导读:1.介绍 读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 下载TinyXML的网址:http://www.grinni

1.介绍

  读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。  

  下载TinyXML的网址:http://www.grinninglizard.com/tinyxml/

  使用TinyXML只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:

tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.cpp。

2.读取XML文件

如读取文件a.xml:

<ToDo>
    <Item priority="1"> 
        <bold>
            Book store!
        </bold>
    </Item>
    <Item priority="2"> 
        book1
    </Item>
    <Item priority="2"> 
        book2
    </Item>
</ToDo>
上面的是要读取的XML文件。

下面的代码用来读取XML文件中的内容。

#include "tinyxml.h"
#include <iostream>
#include <string>

using namespace std;

enum SuccessEnum {FAILURE,SUCCESS};

SuccessEnum loadXML()
{
    TiXmlDocument doc;
    if(!doc.LoadFile("a.xml"))
    {
        cerr << doc.ErrorDesc() << endl;
        return FAILURE;
    }

    TiXmlElement* root = doc.FirstChildElement();
    if(root == NULL)
    {
        cerr << "Failed to load file: No root element." << endl;
        doc.Clear();
        return FAILURE;
    }

    for(TiXmlElement* elem = root->FirstChildElement(); elem != NULL; elem = elem->NextSiblingElement())
    {
        string elemName = elem->Value();
        const char* attr;
        attr = elem->Attribute("priority");
        if(strcmp(attr,"1")==0)
        {
            TiXmlElement* e1 = elem->FirstChildElement("bold");
            TiXmlNode* e2=e1->FirstChild();
            cout<<"priority=1t"<<e2->ToText()->Value()<<endl;

        }
        else if(strcmp(attr,"2")==0)
        {
            TiXmlNode* e1 = elem->FirstChild();
            cout<<"priority=2t"<<e1->ToText()->Value()<<endl;
        }
    }
    doc.Clear();
    return SUCCESS;
}

int main(int argc,char* argv[])
{
    if(loadXML() == FAILURE)
        return 1;
    return 0;
}


3.生成XML文件

如生成文件b.xml如下所示:

<root>
    <Element1 attribute1="some value" />
    <Element2 attribute2="2" attribute3="3">
        <Element3 attribute4="4" />
        Some text.
    </Element2>
</root>

生成上面b.xmlL文件代码如下:

#include "tinyxml.h"
#include <iostream>
#include <string>
using namespace std;

enum SuccessEnum {FAILURE,SUCCESS};

SuccessEnum saveXML()
{
    TiXmlDocument doc;

    TiXmlElement* root = new TiXmlElement("root");
    doc.LinkEndChild(root);

    TiXmlElement* element1 = new TiXmlElement("Element1");
    root->LinkEndChild(element1);

    element1->SetAttribute("attribute1","some value");


    TiXmlElement* element2 = new TiXmlElement("Element2");  ///元素
    root->LinkEndChild(element2);

    element2->SetAttribute("attribute2","2");
    element2->SetAttribute("attribute3","3");


    TiXmlElement* element3 = new TiXmlElement("Element3");
    element2->LinkEndChild(element3);

    element3->SetAttribute("attribute4","4");

    TiXmlText* text = new TiXmlText("Some text.");  ///文本
    element2->LinkEndChild(text);


    bool success = doc.SaveFile("b.xml");
    doc.Clear();

    if(success)
        return SUCCESS;
    else
        return FAILURE;
}

int main(int argc,char* argv[])
{
    if(saveXML() == FAILURE)
        return 1;
    return 0;
}


4.重要函数或类型的说明

  (1)FirstChildElement(const char* value=0):获取第一个值为value的子节点,value默认值为空,则返回第一个子节点。

  (2)NextSiblingElement( const char* _value=0 ) :获得下一个(兄弟)节点。

  (3)LinkEndChild(XMLHandle *handle):添加一个子节点。元素或者文本

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读