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_default 0x01 打开 节点根据DOM树中的深度缩进 format_write_bom 0x02 关闭 将编码特定的BOM写入输出流 format_raw 0x04 关闭 使用原始输出模式(没有缩进,也没有写断线) format_no_declaration 0x08 关闭 省略默认XML声明 format_no_escapes 0x10 关闭 处理特殊符号”<,&”等 format_save_file_text 0x20 关闭 在XMLNox::SAVEEX文件中使用文本模式打开文件。这使得某些系统上的特殊字符(即新行)转换。 format_indent_attributes 0x40 关闭 用适当的缩进将新属性写在新行上 format_no_empty_element_tags 0x80 关闭 不要输出空元素标签,而是写一个显式的开始和结束标记,即使没有孩子 -
encoding:设置输出编码,默认为encoding_auto。
值 描述 encoding_auto 自动检查编码,默认 encoding_utf8 UTF-8 encoding_utf16_le Little-endian UTF16 encoding_utf16_be Big-endian UTF16 encoding_utf16 UTF16 with native endianness encoding_utf32_le Little-endian UTF32 encoding_utf32_be Big-endian UTF32 encoding_utf32 UTF32 with native endianness encoding_wchar The 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.运行结果