Skip to content

Instantly share code, notes, and snippets.

@drmalex07
Created March 17, 2017 18:56
Show Gist options
  • Save drmalex07/cda2e76157e26b55725a4f876b7e647b to your computer and use it in GitHub Desktop.
Save drmalex07/cda2e76157e26b55725a4f876b7e647b to your computer and use it in GitHub Desktop.
An example parsing XML using Xerces library in C++. #c++ #xml #xerces
#include <iostream>
#include <iomanip>
// Compile with something like (Makefile excerpt):
// g++ -g -O0 -Wall -I/usr/local/xerces/include/ $(^) -L/usr/local/xerces/lib/ -lxerces-c
#include <fstream>
#include <sstream>
#include <xercesc/parsers/XercesDOMParser.hpp>
#include <xercesc/dom/DOM.hpp>
#include <xercesc/sax/HandlerBase.hpp>
#include <xercesc/util/XMLString.hpp>
#include <xercesc/util/PlatformUtils.hpp>
using namespace std;
using namespace xercesc_3_1;
int main(int argc, char* args[])
{
try {
XMLPlatformUtils::Initialize();
} catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Error during initialization! :\n" << message << "\n";
XMLString::release(&message);
return 1;
}
XercesDOMParser* parser = new XercesDOMParser();
parser->setValidationScheme(XercesDOMParser::Val_Always);
parser->setDoNamespaces(true); // optional
ErrorHandler* errHandler = (ErrorHandler*) new HandlerBase();
parser->setErrorHandler(errHandler);
const char * xmlFile = "samples/person.xml";
try {
parser->parse(xmlFile);
} catch (const XMLException& toCatch) {
char* message = XMLString::transcode(toCatch.getMessage());
cout << "Exception message is: \n" << message << "\n";
XMLString::release(&message);
return -1;
} catch (const DOMException& toCatch) {
char* message = XMLString::transcode(toCatch.msg);
cout << "Exception message is: \n" << message << "\n";
XMLString::release(&message);
return -1;
} catch (...) {
cout << "Unexpected Exception \n";
return -1;
}
cout << xmlFile << ": parse OK" << endl;
delete parser;
delete errHandler;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment