21 #ifndef XercesDomReader_hxx
22 #define XercesDomReader_hxx
28 #include <xercesc/parsers/XercesDOMParser.hpp>
29 #include <xercesc/framework/MemBufInputSource.hpp>
30 #include <xercesc/sax/HandlerBase.hpp>
36 namespace xercesc = XERCES_CPP_NAMESPACE;
47 xercesc::XercesDOMParser * parser;
53 parser =
new xercesc::XercesDOMParser();
64 xercesc::XercesDOMParser * temp = parser;
68 xercesc::DOMDocument *
read(std::istream & target)
70 if (target.fail())
throw XmlStorageErr(
"Unable to open the document source");
71 parser->setErrorHandler(
this);
72 parser->setValidationScheme(xercesc::XercesDOMParser::Val_Auto);
73 parser->setValidationSchemaFullChecking(
true);
74 parser->setDoNamespaces(
true);
75 parser->setDoSchema(
true);
76 parser->setCreateEntityReferenceNodes(
true);
78 std::ostringstream stream;
83 if(!target.good())
break;
86 std::string temp = stream.str();
87 unsigned length = temp.length();
88 const char * documentText = temp.c_str();
89 xercesc::MemBufInputSource xercesInputSource (
90 (
const XMLByte*)documentText
96 xercesInputSource.setCopyBufToStream(
false);
98 parser->parse(xercesInputSource);
100 if (parser->getErrorCount())
102 (std::string(
"\nXML Parser Errors:\n")+
104 xercesc::DOMDocument *doc = parser->getDocument();
105 CLAM_ASSERT(doc,
"No errors but document not loaded!");
109 typedef std::list<std::string> Missatges;
111 void error(
const xercesc::SAXParseException& e)
116 void fatalError(
const xercesc::SAXParseException& e)
118 report(
"Fatal Error", e);
121 void warning(
const xercesc::SAXParseException& e)
123 report(
"Warning", e);
126 void report(
const std::string & level,
const xercesc::SAXParseException& e)
128 std::ostringstream stream;
129 stream << level <<
" at file " <<
L(e.getSystemId())
130 <<
", line " << e.getLineNumber()
131 <<
", col " << e.getColumnNumber()
132 <<
":\n" <<
L(e.getMessage());
133 _errors.push_back(stream.str());
139 Missatges::iterator it = _errors.begin();
140 for (; it!=_errors.end(); it++)
141 result += *it +
"\n";
149 #endif//XercesDomReader_hxx