http://rapidxml.sourceforge.net/
Example XML from here:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms762271%28v=vs.85%29.aspx
Test code under the same folder of the RapidXML:
#include <iostream>
#include <sstream>
#include <fstream>
#include "rapidxml/rapidxml.hpp"
#include "rapidxml/rapidxml_print.hpp"
using namespace std;
using namespace rapidxml;
char *buffer_file( const char *filename, size_t *buffer_len = NULL )
{
//open file. note: it is important to say binary here, otherwise it does conversion that may change the length!
std::fstream file( filename, std::ios::in|::std::ios::binary );
if( !file ) return NULL;
//read the size...
file.seekg(0, std::ios::end);
size_t length = (size_t)file.tellg();
if( buffer_len ) *buffer_len = length;
file.seekg(0, std::ios::beg);
//read into memory buffer..
char *filebuf = new char[length+1];
file.read(filebuf, length);
filebuf[length] = '\0'; //make it null-terminated
file.close();
return filebuf;
}
int main(int argc, char* argv[]) {
char* xml = buffer_file("books.xml");
//Parse the original document
xml_document<> doc;
doc.parse<0>(xml);
xml_node<> * node = doc.first_node();
cout << "Name of my first node is: " << node->name() << "\n";
for( xml_node<>* node_ptr = node->first_node("book"); node_ptr != NULL; node_ptr = node_ptr->next_sibling())
cout<< "node name : " << node_ptr->first_attribute("id")->value()<< endl;
return 0;
}
No comments:
Post a Comment