c++之xml的创建,增删改查

7 篇文章 1 订阅

c++之xml的创建,增删改查

1.创建写入

#include <stdio.h>
#include <typeinfo>
#include "F:/EDGE/tinyxml/tinyxml.h"
#include <iostream>
#include <string>
#include <Winsock2.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;
void main() {
    printf("\n----- XML -----\n");

    //新建一个xml文件
    // 定义一个TiXmlDocument类指针
    TiXmlDocument* tinyXmlDoc = new TiXmlDocument();



    // xml的声明(三个属性:版本,编码格式,保留空串即可)
    TiXmlDeclaration* tinyXmlDeclare = new TiXmlDeclaration("1.0", "utf-8", "");    // 声明头部格式
    // 插入文档类中
    tinyXmlDoc->LinkEndChild(tinyXmlDeclare);



    // 根节点
    TiXmlElement* Library = new TiXmlElement("Library");
    tinyXmlDoc->LinkEndChild(Library);        // 把根节点插入到文档类中



    // 创建Book节点
    TiXmlElement* Book = new TiXmlElement("Book");
    TiXmlText* bookText = new TiXmlText("书本");    // 创建文本
    Book->LinkEndChild(bookText);    // 给Book节点添加文本
    Library->LinkEndChild(Book);    // 插入到根节点下


    // 创建Book1节点
    TiXmlElement* Book1 = new TiXmlElement("Book1");
    // 插入属性
    Book1->SetAttribute("ID", 1);
    Book1->SetAttribute("Name", "红楼梦");
    Book1->SetAttribute("Price", "64.6");

    // 创建Book1的子节点Description
    TiXmlElement* Description = new TiXmlElement("Description");
    TiXmlText* descriptionText = new TiXmlText("林黛玉");        // 创建文本
    Description->LinkEndChild(descriptionText);        // 给Description节点添加文本
    Book1->LinkEndChild(Description);                // 插入到Book1节点下

    // 创建Book1的子节点Page
    TiXmlElement* Page = new TiXmlElement("Page");
    TiXmlText* pageText = new TiXmlText("500页");        // 创建文本
    Page->LinkEndChild(pageText);    // 给Page节点添加文本
    Book1->LinkEndChild(Page);        // 插入到Book1节点下

    Library->LinkEndChild(Book1);    // 插入到根节点下



    // 保存到文件    
    /*bool result = tinyXmlDoc->SaveFile("E:\\abs\\test.xml");
    if (result == true) printf("文件写入成功!\n");
    else printf("文件写入失败!\n");*/
    
    // 打印出来看看
    //tinyXmlDoc->Print();

    TiXmlPrinter a;
    tinyXmlDoc->Accept(&a);
    printf("%s\n", a.CStr());
    printf(typeid(a.CStr()).name());
    
}

打印:
在这里插入图片描述

2.添加

#include <stdio.h>
#include <typeinfo>
#include "F:/EDGE/tinyxml/tinyxml.h"
#include <iostream>
#include <string>
#include <Winsock2.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

void main() {
    printf("\n----- add_XML -----\n");

    // 定义一个TiXmlDocument类指针
    TiXmlDocument* tinyXmlDoc = new TiXmlDocument("E:\\abs\\test.xml");
    tinyXmlDoc->LoadFile(TIXML_ENCODING_LEGACY);

    // 读取文档声明信息(也就是xml的头部信息:<?xml version="1.0" encoding="utf-8" ?>)
    TiXmlDeclaration* pDeclar = tinyXmlDoc->FirstChild()->ToDeclaration();
    if (pDeclar != NULL) {
        printf("头部信息: version is %s , encoding is %s\n", pDeclar->Version(), pDeclar->Encoding());
    }

    // 得到文件根节点
    TiXmlElement* Library = new TiXmlElement("Library");
    Library = tinyXmlDoc->RootElement();


    // 创建Book1节点
    TiXmlElement* Book1 = new TiXmlElement("Book1");
    // 插入属性
    Book1->SetAttribute("ID", 2);
    Book1->SetAttribute("Name", "西游记");
    Book1->SetAttribute("Price", "99.81");

    // 创建Book1的子节点Description
    TiXmlElement* Description = new TiXmlElement("Description");
    TiXmlText* descriptionText = new TiXmlText("师徒四人");        // 创建文本
    Description->LinkEndChild(descriptionText);        // 给Description节点添加文本
    Book1->LinkEndChild(Description);                // 插入到Book1节点下

    // 创建Book1的子节点Page
    TiXmlElement* Page = new TiXmlElement("Page");
    TiXmlText* pageText = new TiXmlText("81页");        // 创建文本
    Page->LinkEndChild(pageText);    // 给Page节点添加文本
    Book1->LinkEndChild(Page);        // 插入到Book1节点下

    Library->LinkEndChild(Book1);    // 插入到根节点下




    // 创建Book1节点
    Book1 = new TiXmlElement("Book1");
    // 插入属性
    Book1->SetAttribute("ID", 3);
    Book1->SetAttribute("Name", "三国演义");
    Book1->SetAttribute("Price", "66.66");

    // 创建Book1的子节点Description
    Description = new TiXmlElement("Description");
    descriptionText = new TiXmlText("三国大战");        // 创建文本
    Description->LinkEndChild(descriptionText);        // 给Description节点添加文本
    Book1->LinkEndChild(Description);                // 插入到Book1节点下

    // 创建Book1的子节点Page
    Page = new TiXmlElement("Page");
    pageText = new TiXmlText("30页");        // 创建文本
    Page->LinkEndChild(pageText);    // 给Page节点添加文本
    Book1->LinkEndChild(Page);        // 插入到Book1节点下

    Library->LinkEndChild(Book1);    // 插入到根节点下


    // 保存到文件    
    bool result = tinyXmlDoc->SaveFile("E:\\abs\\test.xml");
    if (result == true) printf("文件写入成功!\n");
    else printf("文件写入失败!\n");

    // 打印出来看看
    tinyXmlDoc->Print();
}


打印:
在这里插入图片描述

3.删除

#include <stdio.h>
#include <typeinfo>
#include "F:/EDGE/tinyxml/tinyxml.h"
#include <iostream>
#include <string>
#include <Winsock2.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;


void main() {
    printf("\n----- del_XML -----\n");

    // 定义一个TiXmlDocument类指针
    TiXmlDocument* tinyXmlDoc = new TiXmlDocument("E:\\abs\\test.xml");
    tinyXmlDoc->LoadFile(TIXML_ENCODING_LEGACY);

    // 读取文档声明信息(也就是xml的头部信息:<?xml version="1.0" encoding="utf-8" ?>)
    TiXmlDeclaration* pDeclar = tinyXmlDoc->FirstChild()->ToDeclaration();
    if (pDeclar != NULL) {
        printf("头部信息: version is %s , encoding is %s\n", pDeclar->Version(), pDeclar->Encoding());
    }

    // 得到文件根节点
    TiXmlElement* Library = new TiXmlElement("Library");
    Library = tinyXmlDoc->RootElement();


    /* 删除 Book 节点 */
    // 方式一
    //TiXmlElement* Book = Library->FirstChildElement("Book");
    //Book->Clear();


    // 方式二
    // 获取Book节点
    TiXmlElement* Book = Library->FirstChildElement("Book");
    Library->RemoveChild(Book->ToElement());


    //TiXmlElement* pItem1 = Library->FirstChildElement("Book");
    //for (; pItem1 != NULL; ) {

    //    if (strncmp(pItem1->GetText(), "书本", 6) == 0) {
    //        // 提前存储删除节点的下一个节点
    //        TiXmlElement* temporary = pItem1->NextSiblingElement("Book1");

    //        // 删除当前节点,删除后pItem为NULL,如果再继续使用它会报错
    //        Library->RemoveChild(pItem1->ToElement());

    //        // 所以这里要进行赋值回来
    //        pItem1 = temporary;
    //    
    //    } else {
    //        // 寻找下一个Book1节点
    //        pItem1 = pItem1->NextSiblingElement("Book1");
    //    }
    //}



    // 删除属性
    TiXmlElement* pItem = Library->FirstChildElement("Book1");
    for (; pItem != NULL; pItem = pItem->NextSiblingElement("Book1")) {

        // 找到属性ID = 1的节点
        if (strcmp(pItem->Attribute("ID"), "1") == 0) {
            // 删除属性为Name的属性
            pItem->RemoveAttribute("Name");
        }
    }

    // 删除整个节点
    pItem = Library->FirstChildElement("Book1");
    for (; pItem != NULL; ) {

        // 找到属性ID = 2的节点
        if (strcmp(pItem->Attribute("ID"), "2") == 0) {
            // 提前存储删除节点的下一个节点
            TiXmlElement* temporary = pItem->NextSiblingElement("Book1");

            // 删除当前节点,删除后pItem为NULL,如果再继续使用它会报错
            Library->RemoveChild(pItem->ToElement());

            // 所以这里要进行赋值回来
            pItem = temporary;

        }
        else {
            // 寻找下一个Book1节点
            pItem = pItem->NextSiblingElement("Book1");
        }
    }




    // 保存到文件    
    bool result = tinyXmlDoc->SaveFile("E:\\abs\\test.xml");
    if (result == true) printf("文件写入成功!\n");
    else printf("文件写入失败!\n");

    // 打印出来看看
    tinyXmlDoc->Print();

}






打印:
在这里插入图片描述

4.修改:

#include <stdio.h>
#include <typeinfo>
#include "F:/EDGE/tinyxml/tinyxml.h"
#include <iostream>
#include <string>
#include <Winsock2.h>

#pragma comment(lib, "ws2_32.lib")

using namespace std;

void main() {
    printf("\n----- alt_XML -----\n");

    // 定义一个TiXmlDocument类指针
    TiXmlDocument* tinyXmlDoc = new TiXmlDocument("E:\\abs\\test.xml");
    tinyXmlDoc->LoadFile(TIXML_ENCODING_LEGACY);

    // 读取文档声明信息(也就是xml的头部信息:<?xml version="1.0" encoding="utf-8" ?>)
    TiXmlDeclaration* pDeclar = tinyXmlDoc->FirstChild()->ToDeclaration();
    if (pDeclar != NULL) {
        printf("头部信息: version is %s , encoding is %s\n", pDeclar->Version(), pDeclar->Encoding());
    }

    // 得到文件根节点
    TiXmlElement* Library = new TiXmlElement("Library");
    Library = tinyXmlDoc->RootElement();


    TiXmlElement* pItem = Library->FirstChildElement("Book1");
    for (; pItem != NULL; pItem = pItem->NextSiblingElement("Book1")) {

        // 找到属性ID = 1的节点
        if (strcmp(pItem->Attribute("ID"), "1") == 0) {
            // 设置Book1的子节点Description的值
            TiXmlElement* Description = pItem->FirstChildElement("Description");    // 获得<Description>108个没房住</Description>
            TiXmlNode* des = Description->FirstChild();    // 获取元素指针        // 获得存储 108个没房住 的指针
            des->SetValue("108个没房住");    // 重新为其设置值                

            TiXmlElement* Page = pItem->FirstChildElement("Page");
            TiXmlNode* page = Page->FirstChild();
            page->SetValue("999页");
        }

        // 设置属性
        if (strcmp(pItem->Attribute("ID"), "3") == 0) {
            pItem->SetAttribute("Price", "33.33");
        }
    }


    // 保存到文件    
    bool result = tinyXmlDoc->SaveFile("E:\\abs\\test.xml");
    if (result == true) printf("文件写入成功!\n");
    else printf("文件写入失败!\n");
    //printf("%s\n", tinyXmlDoc->Value());
    // 打印出来看看
    tinyXmlDoc->Print();
}





打印:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我可以为您提供一个简单的示例代码,展示如何使用C++实现一个基本的增删改查操作。这里我们以一个学生信息管理系统为例,实现对学生信息的增加、删除、修改和查询操作。 首先,定义一个学生类,包含学生的基本信息,如姓名、年龄、性别、学号等等。 ```c++ #include <iostream> #include <string> using namespace std; class Student { public: string name; // 学生姓名 int age; // 学生年龄 char gender; // 学生性别 string id; // 学生学号 Student(string name, int age, char gender, string id) { this->name = name; this->age = age; this->gender = gender; this->id = id; } void display() { cout << "Name: " << name << endl; cout << "Age: " << age << endl; cout << "Gender: " << gender << endl; cout << "ID: " << id << endl; } }; ``` 接下来,我们定义一个学生信息管理类,实现对学生信息的增加、删除、修改和查询操作。这里我们使用一个vector容器来存储学生信息。 ```c++ #include <vector> class StudentManager { public: vector<Student> students; // 学生信息存储容器 // 添加学生信息 void addStudent(Student student) { students.push_back(student); } // 根据学号删除学生信息 void deleteStudent(string id) { for (auto iter = students.begin(); iter != students.end(); iter++) { if (iter->id == id) { students.erase(iter); break; } } } // 根据学号修改学生信息 void updateStudent(string id, Student student) { for (auto iter = students.begin(); iter != students.end(); iter++) { if (iter->id == id) { iter->name = student.name; iter->age = student.age; iter->gender = student.gender; break; } } } // 根据学号查询学生信息 void queryStudent(string id) { for (auto iter = students.begin(); iter != students.end(); iter++) { if (iter->id == id) { iter->display(); break; } } } }; ``` 最后,我们可以在主函数中使用这些操作来实现学生信息的管理。 ```c++ int main() { // 创建学生信息管理对象 StudentManager manager; // 添加学生信息 manager.addStudent(Student("Tom", 18, 'M', "10001")); manager.addStudent(Student("Lucy", 17, 'F', "10002")); manager.addStudent(Student("Jack", 20, 'M', "10003")); // 查询学生信息 manager.queryStudent("10002"); // 修改学生信息 manager.updateStudent("10001", Student("Jerry", 19, 'M', "10001")); // 删除学生信息 manager.deleteStudent("10003"); return 0; } ``` 这样,我们就实现了一个简单的学生信息管理系统,包括增加、删除、修改和查询学生信息的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如鸿毛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值