使用pugixml创建并解析XML

创建并读取如下xml文件:

<?xml version="1.0" encoding="utf-8"?>
<Students>
	<!--Students!-->
	<Student id="1">
		<Name>MaZhe</Name>
		<Age>18</Age>
	</Student>
	<Student id="2">
		<Name>Miki</Name>
		<Age>19</Age>
	</Student>
	<Student id="3">
		<Name>Maki</Name>
		<Age>20</Age>
	</Student>
</Students>

代码实现:

#include <iostream>
#include <string>
#include <vector>
#include <list>

#include "pugixml.hpp"

static const char* kFileName = "students2.xml";

struct Student {
  int id;
  std::string name;
  int age;

  Student(int id_, const std::string& name_, int age_)
      : id(id_)
      , name(name_)
      , age(age_) {
  }

  void Print() const {
    std::cout << "Id: " << id << ", Name: " << name << ", Age: " << age << std::endl;
  }
};

using namespace std;

// 创建XML。
static void WriteData() {
  // Prepare data.
  std::list<Student> students;
  students.push_back(Student(1, "MaZhe", 18));
  students.push_back(Student(2, "Miki", 19));
  students.push_back(Student(3, "Maki", 20));

  // Serialization.
  pugi::xml_document xdoc;

  pugi::xml_node xdec = xdoc.prepend_child(pugi::node_declaration);
  xdec.append_attribute("version").set_value("1.0");
  xdec.append_attribute("encoding").set_value("utf-8");

  pugi::xml_node xstudents = xdoc.append_child("Students");
  xstudents.append_child(pugi::node_comment).set_value("Students!");

  for (const Student& student : students) {
    pugi::xml_node xstudent = xstudents.append_child("Student");

    pugi::xml_attribute xstudent_id = xstudent.append_attribute("id");
    xstudent_id.set_value(student.id);

    pugi::xml_node xname = xstudent.append_child("Name");
    xname.append_child(pugi::node_pcdata).set_value(student.name.c_str());

    pugi::xml_node xage = xstudent.append_child("Age");
    char buf[128] = { 0 };
    sprintf(buf, "%d", student.age);
    xage.append_child(pugi::node_pcdata).set_value(buf);
  }

  xdoc.print(std::cout);

  xdoc.save_file(kFileName);
}

// 读取并解析XML。
static void ReadData() {
  std::list<Student> students;

  pugi::xml_document xdoc;
  if (!xdoc.load_file(kFileName)) {
    return;
  }

  pugi::xml_node xstudents = xdoc.child("Students");
  for (pugi::xml_node xstudent = xstudents.first_child(); xstudent != NULL; xstudent = xstudent.next_sibling()) {
    int id = xstudent.attribute("id").as_int();

    pugi::xml_node xname = xstudent.child("Name");
    std::string name = xname.text().as_string();

    pugi::xml_node xage = xstudent.child("Age");
    int age = xage.text().as_int();

    students.push_back(Student(id, name, age));
  }

  for (const Student& student : students) {
    student.Print();
  }
}

int main() {
  WriteData();
  ReadData();

  return 0;
}


  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pugixml是一个用于解析和操作XML文档的C++库。它提供了一套简单易用的API,可以用于读取、修改和创建XML文档。根据引用,pugixml提供了一些关于增删改的教程,包括如何添加或删除节点、如何修改节点的属性等。同时,根据引用,pugixml的官方教程示例主要集中在对属性的操作,对元素的操作相对较少。如果你需要更详细的指导,你可以参考引用中的链接,该链接提供了有关如何使用pugixml替换节点的PCDATA或文本的问题的解答。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [xml教程(增删改)xml教程 xml xml操作教程 xml读取-程序员百味www.bywei.cn](https://download.csdn.net/download/byweicn/2844639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [pugixml的基础操作,增删改查、保存文件](https://blog.csdn.net/almostlover__/article/details/125895843)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值