XML SAX parser using xerces in c++

Exgivrynnqcwg

New Member
\[code\] #include <xercesc/sax2/SAX2XMLReader.hpp>#include <xercesc/sax2/XMLReaderFactory.hpp>#include <xercesc/sax2/DefaultHandler.hpp>#include <xercesc/util/XMLString.hpp>#include <conio.h>#include <xercesc/parsers/SAXParser.hpp>#include <xercesc/sax/HandlerBase.hpp>#include <xercesc/util/XMLString.hpp>#include <iostream>#include <xercesc/dom/DOM.hpp>#include <xercesc/parsers/XercesDOMParser.hpp>using namespace std;using namespace xercesc;class ErnstSax2Handler : public DefaultHandler {public:ErnstSax2Handler(void);virtual ~ErnstSax2Handler(void);void startElement( const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs);void endElement( const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);void characters( const XMLCh* const chars, const XMLSize_t length);void fatalError(const SAXParseException&);protected:// define variables to save the state};void ErnstSax2Handler::startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs){char* name = XMLString::transcode(localname);cout<<name;// ...XMLString::release(&name);}void ErnstSax2Handler::endElement( const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname){char* name = XMLString::transcode(localname);//...XMLString::release(&name);}void ErnstSax2Handler::fatalError(const SAXParseException& exception){char* message = XMLString::transcode(exception.getMessage());cout << "Fatal Error: " << message << " at line: " << exception.getLineNumber() << endl;XMLString::release(&message);}void ErnstSax2Handler::characters(const XMLCh* const chars,const XMLSize_t length){ // This is called when the parser is reading text. // You will need to save what state you are in via // startElement / endElement. }int main () { try { XMLPlatformUtils::Initialize(); } catch (const XMLException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Error during initialization! :\n"; cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); return 1; } char* xmlFile = "test.xml"; SAX2XMLReader* parser = XMLReaderFactory::createXMLReader(); parser->setFeature(XMLUni::fgSAX2CoreValidation, true); parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); // optional DefaultHandler* defaultHandler = new DefaultHandler(); xercesc::ContentHandler* h = new DefaultHandler(); parser->setContentHandler(h); parser->setErrorHandler(defaultHandler); 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 SAXParseException& toCatch) { char* message = XMLString::transcode(toCatch.getMessage()); cout << "Exception message is: \n" << message << "\n"; XMLString::release(&message); return -1; } catch (...) { cout << "Unexpected Exception \n" ; return -1; } getch(); delete parser; delete defaultHandler; return 0;}\[/code\]When I run above code in visual studio 2010, it won't print any element name and their content on the screen. Can anybody help me how to call any handler and how to get content from elements(nodes)?Thanx in advance.
 
Back
Top