Ubuntu TinyXml使用工程 简版

本文档详细介绍了如何使用TinyXML库来创建和读取XML文件。首先,将TinyXML库的源文件添加到项目中,然后通过示例代码展示了如何创建XML文档,包括添加声明、根元素、子元素及属性。接着,演示了读取XML文件,获取根节点、子节点及其内容的方法。在创建XML时注意避免使用可能导致解析问题的数字节点名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TinyXml下载地址: TinyXML download | SourceForge.net

将压缩包中的 tinystr.cpp , tinystr.h , tinyxml.cpp , tinyxmlerror.cpp , tinyxml.h , tinyxmlparser.cpp 这六个文件放到项目工程中。

代码如下:

#include <iostream>

#include "tinystr.h"
#include "tinyxml.h"

using namespace std;

int CreateXml()
{
    // 创建一个xml结构
    TiXmlDocument* pDoc = new TiXmlDocument();

    TiXmlDeclaration* pDec = new TiXmlDeclaration("1.0", "GB2312", "");
    pDoc->LinkEndChild(pDec);
    // 创建一个根节点并连接到xml
    TiXmlElement* pRoot = new TiXmlElement("item");
    pDoc->LinkEndChild(pRoot);
    // 创建一个name子节点并连接根节点下
    TiXmlElement* nameElement = new TiXmlElement("name");
    pRoot->LinkEndChild(nameElement);
    nameElement->SetAttribute("ID", "1");
    TiXmlText* nameContent = new TiXmlText("opop");
    nameElement->LinkEndChild(nameContent);

    TiXmlElement* addrElement = new TiXmlElement("addr");
    pRoot->LinkEndChild(addrElement);
    TiXmlText* addrContent = new TiXmlText("heilongjiang");
    addrElement->LinkEndChild(addrContent);

    TiXmlElement* telElement = new TiXmlElement("tel");
    pRoot->LinkEndChild(telElement);
    TiXmlElement* tel_number = new TiXmlElement("Number");
    telElement->LinkEndChild(tel_number);
    tel_number->SetAttribute("yidong", "123456789");
    tel_number->SetAttribute("liantong", "987654321");

    TiXmlElement* emailElement = new TiXmlElement("e-mail");
    pRoot->LinkEndChild(emailElement);
    TiXmlElement* emailContent_qq = new TiXmlElement("QQ");
    emailElement->LinkEndChild(emailContent_qq);
    TiXmlText* test_qq = new TiXmlText("");
    test_qq->SetValue("opop@qq.com");
    emailContent_qq->LinkEndChild(test_qq);
    TiXmlElement* emailContent_163 = new TiXmlElement("163");
    emailElement->LinkEndChild(emailContent_163);
    TiXmlText* test_163 = new TiXmlText("");
    test_163->SetValue("opop@163.com");
    emailContent_163->LinkEndChild(test_163);


    pDoc->Print();

    pDoc->SaveFile("test.xml");

    delete pDoc;

    cout<<"write success!!! bye_bye"<<endl;

    return 0;
}

int ReadXml()
{
    cout<<"read success!!! bye_bye"<<endl;
    //创建一个xml结构并载入文件内容
    TiXmlDocument* pDoc = new TiXmlDocument();
    pDoc->LoadFile("test.xml");
    pDoc->Print();
    //获取根节点
    TiXmlElement* pRoot = pDoc->RootElement();
    printf("root = %s\n", pRoot->Value());
    //获取根节点下的子节点并打印其内容
    TiXmlElement* pFirst = pRoot->FirstChildElement("name");
    printf("name = %s\n", pFirst->FirstChild()->ToText()->Value());
    printf("ID = %s\n", pFirst->Attribute("ID"));

    pFirst = pRoot->FirstChildElement("tel");
    TiXmlElement* pSencond = pFirst->FirstChildElement("Number");
    printf("yidong = %s\n", pSencond->Attribute("yidong"));

    pFirst = pRoot->FirstChildElement("e-mail");
    pSencond = pFirst->FirstChildElement("QQ");
    printf("QQ = %s\n", pSencond->FirstChild()->ToText()->Value());

    delete  pDoc;

    return 0;
}

int main()
{
    cout << "Hello World!" << endl;

    CreateXml();

    cout<<endl<<endl<<endl<<endl<<endl;

    ReadXml();

    return 0;
}

说明:上面会出现readXml时LoadFile不全的情况,因为存文件时数字163少了右边部分,所以节点不要写数字。

更新一版程序

#include <iostream>

#include "tinystr.h"
#include "tinyxml.h"

using namespace std;

int CreateXml()
{
    // 创建一个xml结构
    TiXmlDocument* pDoc = new TiXmlDocument();

    TiXmlDeclaration* pDec = new TiXmlDeclaration("1.0", "GB2312", "");
    pDoc->LinkEndChild(pDec);
    // 创建一个根节点并连接到xml
    TiXmlElement* pRoot = new TiXmlElement("item");
    pDoc->LinkEndChild(pRoot);
    // 创建一个name子节点并连接根节点下
    TiXmlElement* nameElement = new TiXmlElement("name");
    pRoot->LinkEndChild(nameElement);
    nameElement->SetAttribute("ID", "1");
    TiXmlText* nameContent = new TiXmlText("opop");
    nameElement->LinkEndChild(nameContent);

    TiXmlElement* addrElement = new TiXmlElement("addr");
    pRoot->LinkEndChild(addrElement);
    TiXmlText* addrContent = new TiXmlText("heilongjiang");
    addrElement->LinkEndChild(addrContent);

    TiXmlElement* telElement = new TiXmlElement("tel");
    pRoot->LinkEndChild(telElement);
    TiXmlElement* tel_number = new TiXmlElement("Number");
    telElement->LinkEndChild(tel_number);
    tel_number->SetAttribute("yidong", "123456789");
    tel_number->SetAttribute("liantong", "987654321");

    TiXmlElement* emailElement = new TiXmlElement("e-mail");
    pRoot->LinkEndChild(emailElement);
    TiXmlElement* emailContent_163 = new TiXmlElement("e-mail:163");
    emailElement->LinkEndChild(emailContent_163);
    TiXmlText* test_163 = new TiXmlText("");
    test_163->SetValue("opop@163.com");
    emailContent_163->LinkEndChild(test_163);
    TiXmlElement* emailContent_qq = new TiXmlElement("e-mail:QQ");
    emailElement->LinkEndChild(emailContent_qq);
    TiXmlText* test_qq = new TiXmlText("");
    test_qq->SetValue("opop@qq.com");
    emailContent_qq->LinkEndChild(test_qq);

    pDoc->Print();

    pDoc->SaveFile("test.xml");

    delete pDoc;

    cout<<"write success!!! bye_bye"<<endl;

    return 0;
}

int ReadXml()
{
    cout<<"read success!!! bye_bye"<<endl;
    //创建一个xml结构并载入文件内容
    TiXmlDocument* pDoc = new TiXmlDocument();
    pDoc->LoadFile("test.xml");
    pDoc->Print();
    //获取根节点
    TiXmlElement* pRoot = pDoc->RootElement();
    printf("root = %s\n", pRoot->Value());
    //获取根节点下的子节点并打印其内容
    TiXmlElement* pFirst = pRoot->FirstChildElement();//读取第一条
    printf("element = %s\n", pFirst->Value());
    printf("name = %s\n", pFirst->FirstChild()->Value());
    printf("ID = %s\n", pFirst->Attribute("ID"));

    pFirst = pFirst->NextSiblingElement();//读取刚才那条的下一个
    printf("element = %s\n", pFirst->Value());
    printf("name = %s\n", pFirst->FirstChild()->Value());

    pFirst = pFirst->NextSiblingElement();
    TiXmlElement* pSencond = pFirst->FirstChildElement("Number");
    printf("yidong = %s\n", pSencond->Attribute("yidong"));

    pFirst = (TiXmlElement*)pRoot->IterateChildren("e-mail", NULL);//查找想要读取的这一条
    pSencond = pFirst->FirstChildElement();
    printf("163 = %s\n", pSencond->FirstChild()->Value());
//    pSencond = pSencond->NextSiblingElement();
//    printf("QQ = %s\n", pSencond->FirstChild()->Value());
    printf("QQ = %s\n", pSencond->NextSibling()->FirstChild()->Value());

    delete  pDoc;

    return 0;
}

int main()
{
    cout << "Hello World!" << endl;

    CreateXml();

    cout<<endl<<endl<<endl<<endl<<endl;

    ReadXml();

    return 0;
}

运行结果截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值