Created
March 17, 2017 18:56
-
-
Save drmalex07/cda2e76157e26b55725a4f876b7e647b to your computer and use it in GitHub Desktop.
An example parsing XML using Xerces library in C++. #c++ #xml #xerces
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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