pugixml 的常见读写操作

pugixml github地址 : https://github.com/zeux/pugixml

pugixml 可以在github上直接下载到源码,包括两个头文件(pugixml.hpp  pugiconfig.hpp) 和 一个源文件(pugixml.cpp)

#include <iostream>
#include <cstdint>
#include "pugixml.hpp"

static const int32_t nBufSize = 128;
static char szBuf[nBufSize] = { 0 };

// 写操作
void Write(const char *szXmlFileName)
{
    pugi::xml_document xmlDoc;
    pugi::xml_node nodeRoot = xmlDoc.append_child("root");
    // 声明
    pugi::xml_node pre = xmlDoc.prepend_child(pugi::node_declaration);
    pre.append_attribute("version") = "1.0";
    pre.append_attribute("encoding") = "utf-8";

    // 注释节点1
    pugi::xml_node nodeCommentStudents = nodeRoot.append_child(pugi::node_comment);
    nodeCommentStudents.set_value("all students info");
    // 普通节点1
    pugi::xml_node nodeStudents = nodeRoot.append_child("students");
    for(int32_t i = 0; i < 10; ++i)
    {
        sprintf_s(szBuf, nBufSize, "student_%02d", i);
        pugi::xml_node nodeStudent = nodeStudents.append_child("student");
        // 增加属性
        nodeStudent.append_attribute("name").set_value(szBuf);
        nodeStudent.append_attribute("score").set_value(100 - i);
    }

    // 注释节点2
    pugi::xml_node nodeCommentBooks = nodeRoot.append_child(pugi::node_comment);
    nodeCommentBooks.set_value("all books info");
    // 普通结点2
    pugi::xml_node nodeBooks = nodeRoot.append_child("books");
    for(int32_t i = 0; i < 10; ++i)
    {
        sprintf_s(szBuf, nBufSize, "book_%02d", i);
        pugi::xml_node nodeBook = nodeBooks.append_child("book");
        // 增加属性
        nodeBook.append_attribute("book").set_value(szBuf);
        nodeBook.append_attribute("price").set_value(50 - i);
    }

    xmlDoc.save_file(szXmlFileName, "\t", 1U, pugi::encoding_utf8);
}

// 读操作
void Read(const char *szXmlFileName)
{
    pugi::xml_document xmlDoc;
    if(!xmlDoc.load_file(szXmlFileName, pugi::parse_default, pugi::encoding_utf8))
    {
        std::cout << "read " << szXmlFileName << " failed" << std::endl;
        return;
    }
    xmlDoc.load_file(szXmlFileName, pugi::parse_default, pugi::encoding_utf8);

    pugi::xml_node nodeRoot = xmlDoc.child("root");
    // 读取第一个节点
    for(pugi::xml_node node = nodeRoot.child("students").first_child(); node; node = node.next_sibling())
    {
        std::cout << "\t" << node.attribute("name").value() << "," << node.attribute("score").value() << std::endl;
    }
    std::cout << std::endl;
    // 读取第二个节点
    for(pugi::xml_node node = nodeRoot.child("books").first_child(); node; node = node.next_sibling())
    {
        std::cout << "\t" << node.attribute("book").value() << "," << node.attribute("price").value() << std::endl;
    }
}

int32_t main()
{
    const char *szXmlFileName = "info.xml";
    Write(szXmlFileName);
    Read(szXmlFileName);
    std::cout << "finish" << std::endl;
    getchar();
    return 0;
}

生成的示例文件:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <!--all students info-->
    <students>
        <student name="student_00" score="100" />
        <student name="student_01" score="99" />
        <student name="student_02" score="98" />
        <student name="student_03" score="97" />
        <student name="student_04" score="96" />
        <student name="student_05" score="95" />
        <student name="student_06" score="94" />
        <student name="student_07" score="93" />
        <student name="student_08" score="92" />
        <student name="student_09" score="91" />
    </students>
    <!--all books info-->
    <books>
        <book book="book_00" price="50" />
        <book book="book_01" price="49" />
        <book book="book_02" price="48" />
        <book book="book_03" price="47" />
        <book book="book_04" price="46" />
        <book book="book_05" price="45" />
        <book book="book_06" price="44" />
        <book book="book_07" price="43" />
        <book book="book_08" price="42" />
        <book book="book_09" price="41" />
    </books>
</root>
时间: 2024-10-10 00:47:47

pugixml 的常见读写操作的相关文章

IO流文件的读写操作

字符流有两个抽象类:Writer   Reader.其对应子类FileWriter,FileReader可实现文件的读写操作 同样,字节流也有两个抽象类:InputStream OutputStream.其对应子类有FileInputStream,FileOutputStream可实现文件读写 IO流中的重要方法:read()方法返回-1,readLine方法返回null.用法列如:while((line=br.readLine())!=null).Scanne类中的hasNext()方法如果此

linux程序设计——对FIFO进行读写操作(第十三章)

4.对FIFO进行读写操作 使用O_NONBLOCK模式会影响的对FIFO的read和write调用. 对一个空的,阻塞的FIFO(即没有用O_NONBLOCK标志打开)的read调用将等待,直到有数据可以读时才继续执行.与此相反,对一个空的,非阻塞的FIFO的read调用将立刻返回0字节. 对一个完全阻塞的FIFO的write调用将等待,直到数据可以写入时才继续执行.如果非阻塞的FIFO不能接收所有写入的数据,它将按下面的规则执行. 如果请求写入的数据长度小于等于PIPE_BUF字节,调用失败

读写操作(补充)

读写操作(补充) 之前的一篇有关终端读写的内容比较详细:https://blog.51cto.com/steed/2315597 这篇,先补充了两个从终端逐行扫描并处理的示例.然后再补充了有关两个写入操作的内容. bufio包,逐行读取 关于bufio包,使用它可以简便和高效地处理输入和输出.其中一个最有用的特性是称为扫描器(Scanner)的类型,它可以读取输入,以行或者单词为单位断开,这是处理以行为单位输入内容的最简单方式. 先声明一个 bufio.Scanner 类型的变量: input

文件的新建、定位、截短和读写操作

1.创建一个新文件,创建新文件除了可以使用open函数之外还可以用creat()函数. 创建文件函数 creat(const char * pathname, mode_t mode) 头文件 :#include <fcntl.h> 参数说明:第一个参数pathname同open函数的第一个参数具有同样的意义,区别在于这是需要创建的文件的地址而不是需要打开文件的地址,第二个参数mode是新建文件的访问权限. 返回值:成功返回1,失败返回-1. 函数说明:creat()函数能够创建一个新的文件,

c#常见stream操作

常见并常用的stream一共有 文件流(FileStream), 内存流(MemoryStream), 压缩流(GZipStream), 加密流(CrypToStream), 网络流(NetworkStream): 1.文件流(读取文件流-输出文件流)FileStream using(Streamstreamwrite=new FileStream(@"D:\BaiduYunDownload\45.avi",FileMode.OpenOrCreate)) { using (Stream

对SD卡的读写操作-保存用户登录密码

import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import android.content.Context; import android.os.Environment; public class Fileservice { /** * 存储用

oracle读写文件--利用utl_file包对磁盘文件的读写操作

摘要: 用户提出一个需求,即ORACLE中的一个表存储了照片信息,字段类型为BLOB,要求能导出成文件形式. 本想写个C#程序来做,后来想起ORACLE有很多包,功能很好很强大,于是网上参考了些文章完成了. 主要是用了ORACLE的两个包:UTL_FILE和DBMS_LOB. 实现过程: 第一步:以管理员用户登陆设置可操作目录 --CREATE DIRECTORY privilege is granted only to SYS and SYSTEM by default. create or

java文件读写操作类

借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内容进行捕获,放在txt文本文档中 2,对各种类型数据都以字符串的形式逐行写入 3,对全局数组的内容进行写入 读操作: 获取文件行数 对逐行字符串型数据进行类型转换,放入二维数组中 为后面算法处理提供入口,但是要小心的是:不可以将行数用全局变量做计数器,否则每次读入是全局变量累加出错,应重新开始读取

python excel读写操作

1.读操作 xlrd 下载地址:https://pypi.python.org/pypi/xlrd 使用代码 # encoding : utf-8 #设置编码方式 import xlrd #导入xlrd模块 #打开指定文件路径的excel文件 xlsfile = r'D:\AutoPlan\apisnew.xls' book = xlrd.open_workbook(xlsfile) #获得excel的book对象 #获取sheet对象,方法有2种: sheet_name=book.sheet_