pugixml输出至string

pugixml处理了半天发现输出至string很不方便,官方文档操作如下:

// 这里麻烦的是需要自己定义
struct xml_string_writer: pugi::xml_writer {
    std::string result;

    virtual void write(const void* data, size_t size)
    {
        result.append(static_cast<const char*>(data), size);
    }
};

void fun() {
    pugi::xml_document doc;
    doc.load_string("<root>hello,world</root>");

    xml_string_writer writer;
    doc.save(writer, "", pugi::format_raw);        // 加参数是为了去掉缩进

    string result = writer.result;
}

我试了下用stringsteam就可以,已经在github上提了issue。你们可以参考下

void fun() {
    pugi::xml_document doc;
    doc.load_string("<root>hello,world</root>");

    std::stringstream os;
    doc.save(os, "", pugi::format_raw);         // 无缩进

    string result = os.str();
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将Pugi XML解析库读取的XML文档存储到结构体数据中的示例代码: ```c++ #include "pugixml.hpp" #include <iostream> #include <string> #include <vector> using namespace std; struct Person { string name; int age; string address; }; int main() { pugi::xml_document doc; if (!doc.load_file("example.xml")) { // 加载XML文档 cout << "Failed to load XML file." << endl; return 1; } vector<Person> persons; // 存储Person结构体数据的vector pugi::xml_node root = doc.child("root"); // 获取根节点 for (pugi::xml_node person_node : root.children("person")) { // 遍历person节点 Person person; person.name = person_node.attribute("name").value(); // 读取name属性 person.age = atoi(person_node.attribute("age").value()); // 读取age属性并转换为整数 person.address = person_node.child_value("address"); // 读取address子节点的值 persons.push_back(person); // 将Person结构体数据添加到vector中 } // 输出vector中的Person结构体数据 for (const auto& person : persons) { cout << "Name: " << person.name << endl; cout << "Age: " << person.age << endl; cout << "Address: " << person.address << endl; } return 0; } ``` 在上面的示例代码中,我们定义了一个Person结构体来存储每个person节点的数据。我们使用Pugi XML解析库读取XML文档,并使用for循环遍历每个person节点。在循环中,我们读取每个person节点的name、age和address数据,并将这些数据存储到Person结构体中。然后,我们将每个Person结构体添加到vector中。最后,我们输出vector中的所有Person结构体数据。 需要注意的是,上面的示例代码中使用了atoi函数来将字符串转换为整数。如果你使用的是C++11或更高版本的C++标准,则可以使用stoi函数来完成相同的任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值