zoukankan      html  css  js  c++  java
  • XML使用指南一1(转)

    在这里我们并不是要讲解如何使用XML,或在网页中使用它。而是要在C/C++中使用它。详细一点就是在C/C++嵌套使用XML文件。要在C/C++中使用XML文件,你就必须需要一个能分析XML文件的函数库。在这方面有很多,比如libxml2,tinxml,expat等等很多。而我使用的是tinyxml,为什么要使用它呢?因为它很小巧,只有两个头文件和四个CPP文件。正如作者在tinyxml官方文件中所说的,如果你不是想在浏览器中使用XML,那么tinyxml非常适合你。

    我们下面来看一下tinyxml是如何在C/C++中建立XML文件的。

    char floader[200],buffer[200];

        

    TiXmlDocument* m_xmlDoc = new TiXmlDocument();

    TiXmlElement xElement("player");

    sprintf(buffer,"%d", 1);

    xElement.SetAttribute("admin", buffer);

    TiXmlElement xPos("pos");

    sprintf(buffer,"%d",2);

    xPos.SetAttribute("x", buffer);

    sprintf(buffer,"%d",3);

    xPos.SetAttribute("y", buffer);

    sprintf(buffer,"%d",4);

    xPos.SetAttribute("zone", buffer);

    xElement.InsertEndChild(xPos);

    m_xmlDoc->InsertEndChild(xElement);

    sprintf(floader,"%s.xml", "antking");

    m_xmlDoc->SaveFile(floader);

    delete m_xmlDoc;

    这段简单的代码的作用就是将用户数据保存在XML文件中。不同的是我对其做了一些简化。

    这段代码的作用就是先建立一个XML文件句柄。

    TiXmlDocument* m_xmlDoc = new TiXmlDocument();

    然后建立一个成员。

    TiXmlElement xElement("player");

    sprintf(buffer,"%d", 1);

    xElement.SetAttribute("admin", buffer);

    然后再建立一个成员。

    TiXmlElement xPos("pos");

    sprintf(buffer,"%d",2);

    xPos.SetAttribute("x", buffer);

    sprintf(buffer,"%d",3);

    xPos.SetAttribute("y", buffer);

    sprintf(buffer,"%d",4);

    xPos.SetAttribute("zone", buffer);

    这个成员包含3个属性。

    接下来是将这个成员连接成上一个成员的子结点。

    xElement.InsertEndChild(xPos);

    然后再把上一个结点连接成为XML文件的子结点。

    m_xmlDoc->InsertEndChild(xElement);

    最后保存这个文件。

    sprintf(floader,"%s.xml", "antking");

    m_xmlDoc->SaveFile(floader);

    释放句柄。

    delete m_xmlDoc;

    这就是创建XML文件的过程。这段代码将产生一个文件,文件内容如下:

    它产生的结构可以用一棵树来表示,见下图:

    接下来,我们看一下如何从上面这个XML文件中读出数据。

    char floader[200],buffer[200];

    TiXmlDocument* m_xmlDoc;

    int admin1,x1,y1,z1;

    sprintf(floader,"%s.xml", "antking");

    m_xmlDoc = new TiXmlDocument(floader);

    if (m_xmlDoc->LoadFile())

    {

    TiXmlElement *xPlayer = 0;

    xPlayer = m_xmlDoc->FirstChildElement("player");

    if (xPlayer)

    {

    if (xPlayer->Attribute("admin"))

    admin1= (bool)atoi(xPlayer->Attribute("admin"));

    TiXmlElement *xZone = 0;

    xZone = xPlayer->FirstChildElement("pos");

    x1 = (int)atoi(xZone->Attribute("x"));

    y1 = (int)atoi(xZone->Attribute("y"));

    z1 = (int)atoi(xZone->Attribute("zone"));

    }

    }

    delete m_xmlDoc;

    printf("%d,%d,%d,%d",admin1,x1,y1,z1);

        这段代码的意思就是,先建立一个文件句柄,如果句柄建立成功就打开一个XML文件。XML文件打开后,先得到它的第一个子结点,如果子结点存在,得到这个结点的属性。然后又打开这个结点的第一个子结点,读出其中的数据。最后关闭文件句柄。


  • 相关阅读:
    9、Spring Boot 2.x 集成 Thymeleaf
    【专题】Spring Boot 2.x 面试题
    8、Spring Boot 2.x 服务器部署
    7、Spring Boot 2.x 集成 Redis
    6、Spring Boot 2.x 集成 MyBatis
    5、Spring Boot 2.x 启动原理解析
    4、Spring Boot 2.x 自动配置原理
    3、Spring Boot 2.x 核心技术
    2、Spring Boot 2.x 快速入门
    centOS下安装JDK1.8.60,glassfish4.1.1以及MySQL
  • 原文地址:https://www.cnblogs.com/lancidie/p/1903554.html
Copyright © 2011-2022 走看看