pugixml库的使用

pugixml库的使用


一、生成xml并保存到文件
1.代码

#include <stdio.h>
#include "pugixml.hpp"
#include "pugiconfig.hpp"
int main(){
    pugi::xml_document xdoc;
    //声明,如果不写并且在save_file()中第三个参数不设置pugi::format_no_declaration,保存的文件中会自动添加 <?xml version="1.0"?> 
    pugi::xml_node xHead = xdoc.prepend_child(pugi::node_declaration);
    xHead.append_attribute("version").set_value("1.0");
    //添加结点
    pugi::xml_node xStudents = xdoc.append_child("Students");

    pugi::xml_node xOne = xStudents.append_child("Student");
    xOne.append_attribute("Name").set_value("Tom");//添加属性
    xOne.append_attribute("Age").set_value("20");

    pugi::xml_node xTwo = xStudents.append_child("Student");
    xTwo.append_attribute("Name").set_value("Marry");
    xTwo.append_attribute("Age").set_value("18");
    //保存到文件
    xdoc.save_file("F:\\student.xml",PUGIXML_TEXT("\t"), pugi::format_default|pugi::format_no_declaration|pugi::format_no_escapes, pugi::encoding_utf8);
    return 0;
    }

2.运行结果
这里写图片描述
3.save_file()函数

//函数声明,在xml_document类中
bool save_file(const char* path, const char_t* indent = PUGIXML_TEXT("\t"), 
    unsigned int flags = format_default,xml_encoding encoding = encoding_auto) const;
功能:保存xml到文件。 参数:
path:文件路径。
indent:默认为PUGIXML_TEXT(“\t”)。
flags:格式化标志,可多选,默认为format_default。
位域默认描述
format_indent、format_default0x01打开节点根据DOM树中的深度缩进
format_write_bom0x02关闭将编码特定的BOM写入输出流
format_raw0x04关闭使用原始输出模式(没有缩进,也没有写断线)
format_no_declaration0x08关闭省略默认XML声明
format_no_escapes0x10关闭处理特殊符号”<,&”等
format_save_file_text0x20关闭在XMLNox::SAVEEX文件中使用文本模式打开文件。这使得某些系统上的特殊字符(即新行)转换。
format_indent_attributes0x40关闭用适当的缩进将新属性写在新行上
format_no_empty_element_tags0x80关闭不要输出空元素标签,而是写一个显式的开始和结束标记,即使没有孩子
encoding:设置输出编码,默认为encoding_auto。
描述
encoding_auto自动检查编码,默认
encoding_utf8UTF-8
encoding_utf16_leLittle-endian UTF16
encoding_utf16_beBig-endian UTF16
encoding_utf16UTF16 with native endianness
encoding_utf32_leLittle-endian UTF32
encoding_utf32_beBig-endian UTF32
encoding_utf32UTF32 with native endianness
encoding_wcharThe same encoding wchar_t has (either UTF16 or UTF32)
encoding_latin1

二、将生成的xml存到字符串中
pugiml库中,没有直接提供将xml输出到字符串中的接口。但是可以通过重写xml_writer类的函数来实现这一功能。
1.重写接口

class xml_writer_string:public pugi::xml_writer
{
public:
    string xml;
    xml_writer_string()
    {
        xml = "";
    }
    void write(const void* data, size_t size)
    {
        char* pXML = new char[size + 1];
        memset(pXML, 0, size + 1);
        memcpy(pXML, data, size);
        xml += string(pXML);
        delete[] pXML;
    }
};

2.输出到字符串中

xml_writer_string str;
xdoc.print(str);
cout << "xml转为字符串:\n" << str.xml << endl;

3.运行结果
这里写图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PugiXML是一个轻量级的XML解析,适用于C++项目。安装PugiXML通常涉及以下几个步骤: 1. **下载源码**:首先从PugiXML的GitHub仓下载最新版本的源代码,地址是 https://github.com/peakhurst/pugixml/releases。 2. **获取编译文件**:如果你的项目使用的是CMake或者手动管理构建系统,你需要下载对应的编译文件(如`.zip`或`.tar.gz`),里面包含了预编译的静态和头文件。 3. **解压并移动到正确目录**:将下载的文件解压缩,并将其中的`include`和`lib`(或者其他指定的文件夹)移动到你的项目可找到的头文件和文件夹中。 4. **配置CMake** (如果使用CMake): - 在CMakeLists.txt文件中,添加`find_package(Pugixml REQUIRED)`来搜索。 - 然后添加`target_link_libraries(your_target pugixml::pugixml)`,确保你的目标链接了PugiXML。 5. **构建项目**:如果你使用的是命令行,运行`cmake .`(假设在源码根目录)然后`make`或`cmake --build .`。如果是IDE,按照IDE的指导配置项目设置。 6. **包含头文件**:在C++代码中,使用`#include <pugixml.hpp>`来引用PugiXML的头文件。 7. **链接**:确保编译器知道在哪里找到PugiXML的静态,这取决于你的构建环境。可能是通过命令行参数`-lpugixml`,或在IDE中配置链接器。 8. **测试安装**:编写一个小示例程序来验证PugiXML是否已经正确安装和链接,尝试解析或生成XML文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值