Skip to content

Instantly share code, notes, and snippets.

@luisgustavomiki
Last active December 15, 2015 15:29
Show Gist options
  • Save luisgustavomiki/5282610 to your computer and use it in GitHub Desktop.
Save luisgustavomiki/5282610 to your computer and use it in GitHub Desktop.
RapidXml Appending and printing example
/*
These must be included in rapidxml_print (at line 140) to make it work:
template<class OutIt, class Ch>
inline OutIt print_children(OutIt out, const xml_node<Ch> *node, int flags, int indent);
template<class OutIt, class Ch>
inline OutIt print_attributes(OutIt out, const xml_node<Ch> *node, int flags);
template<class OutIt, class Ch>
inline OutIt print_data_node(OutIt out, const xml_node<Ch> *node, int flags, int indent);
template<class OutIt, class Ch>
inline OutIt print_cdata_node(OutIt out, const xml_node<Ch> *node, int flags, int indent);
template<class OutIt, class Ch>
inline OutIt print_element_node(OutIt out, const xml_node<Ch> *node, int flags, int indent);
template<class OutIt, class Ch>
inline OutIt print_declaration_node(OutIt out, const xml_node<Ch> *node, int flags, int indent);
template<class OutIt, class Ch>
inline OutIt print_comment_node(OutIt out, const xml_node<Ch> *node, int flags, int indent);
template<class OutIt, class Ch>
inline OutIt print_doctype_node(OutIt out, const xml_node<Ch> *node, int flags, int indent);
template<class OutIt, class Ch>
inline OutIt print_pi_node(OutIt out, const xml_node<Ch> *node, int flags, int indent);
On g++.
Not sure on VC tbh
*/
#include "rapidxml\rapidxml_utils.hpp"
#include "rapidxml\rapidxml_print.hpp"
#include "rapidxml\rapidxml.hpp"
#include <string.h>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <vector>
using namespace rapidxml;
int main(int argc, char *argv[])
{
std::cout << "Parsing my beer journal..." << std::endl;
xml_document<> doc;
xml_node<> * root_node;
// Read the xml file into a vector
std::ifstream theFile ("beerJournal.xml");
std::vector<char> buffer((std::istreambuf_iterator<char>(theFile)), std::istreambuf_iterator<char>());
buffer.push_back('\0');
// Parse the buffer using the xml file parsing library into doc
doc.parse<0>(&buffer[0]);
// Find our root node
root_node = doc.first_node("MyBeerJournal");
xml_node<> * new_node = doc.allocate_node(node_element, "Beer", "LOL");
root_node->append_node(new_node);
//delete new_node; will crash
std::cout << doc;
system("PAUSE");
return EXIT_SUCCESS;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment