 |
Return to article.
Listing 8. DOM loading and exception boilerplate
#include <xercesc/dom/DOM.hpp>
#include "XercesString.h"
// boilerplate DOM loading example.
int main(int argc, char *argv[])
{
bool bFailed = false;
if (argc < 2)
return -1;
// initialize the XML library.
XMLPlatformUtils::Initialize();
// create new parser instance.
XercesDOMParser *parser = new XercesDOMParser;
if (parser)
{
parser->setValidationScheme(XercesDOMParser::Val_Auto);
parser->setDoNamespaces(false);
parser->setDoSchema(false);
// skip this if you haven't written your own error reporter class.
DOMTreeErrorReporter *errReporter = new DOMTreeErrorReporter;
parser->setErrorHandler(errReporter);
parser->setCreateEntityReferenceNodes(false);
//parser->setToCreateXMLDeclTypeNode(true);
try
{
XercesString src(argv[1]);
LocalFileInputSource source(src);
parser->parse(source);
bFailed = parser->getErrorCount() != 0;
if (bFailed)
{
std::cerr << "Parsing " << argv[1];
std::cerr << " error count: " << parser->getErrorCount() << std::endl;
}
}
catch (const DOMException& e)
{
std::cerr << "DOM Exception parsing ";
std::cerr << strSrc;
std::cerr << " reports: ";
// was message provided?
if (e.msg)
{
// yes: display it as ascii.
char *strMsg = XMLString::transcode(e.msg);
std::cerr << strMsg << std::endl;
XMLString::release(&strMsg);
}
else
// no: just display the error code.
std::cerr << e.code << std::endl;
bFailed = true;
}
catch (const XMLException& e)
{
std::cerr << "XML Exception parsing ";
std::cerr << argv[1];
std::cerr << " reports: ";
std::cerr << e.getMessage() << std::endl;
bFailed = true;
}
catch (const SAXException& e)
{
std::cerr << "SAX Exception parsing ";
std::cerr << argv[1];
std::cerr << " reports: ";
std::cerr << e.getMessage() << std::endl;
bFailed = true;
}
catch (...)
{
std::cerr << "An exception parsing ";
std::cerr << argv[1] << std::endl;
bFailed = true;
}
// did the input document parse okay?
if (!bFailed)
{
DOMNode *pDoc = parser->getDocument();
// insert code to do something with the DOM document here.
}
}
XMLPlatformUtils::Terminate();
getchar();
return 0;
}
|
Return to article.
|  |
|