53 #include <xercesc/sax/SAXParseException.hpp>
54 #include <xercesc/parsers/XercesDOMParser.hpp>
55 #include <xercesc/framework/LocalFileFormatTarget.hpp>
68 #define FIX_XERCES_getElementById_BUG true
70 #define X(str) XString(str).unicode_str()
71 #define S(str) str.c_str()
75 static xercesc::XercesDOMParser* scratchParser=0;
76 xercesc::XercesDOMParser* parser;
79 parser =
new xercesc::XercesDOMParser;
81 else if (scratchParser == 0)
83 parser = scratchParser =
new xercesc::XercesDOMParser;
87 parser = scratchParser;
92 parser->setValidationScheme(xercesc::XercesDOMParser::Val_Auto);
93 parser->setCreateEntityReferenceNodes(
false);
94 parser->setValidationSchemaFullChecking(
true);
95 parser->setDoNamespaces(
true);
96 parser->setDoSchema(
true);
97 parser->setEntityResolver(&myEntityResolver);
100 parser->setErrorHandler(&errorHandler);
104 parser->parse(xmlFile.c_str());
107 catch (
const xercesc::XMLException& toCatch)
110 <<
"\nparseInputDocument: Error during parsing: '" << xmlFile
111 <<
"'\n" <<
"Exception message is: \n"
112 << toCatch.getMessage() <<
"\n" << std::endl;
115 catch (
const xercesc::DOMException& toCatch)
118 <<
"\nXParsers: Error during parsing: '" << xmlFile <<
"'\n"
119 <<
"Exception message is: \n"
120 << toCatch.msg <<
"\n" << std::endl;
121 xercesc::XMLPlatformUtils::Terminate();
127 <<
"\nparseInputDocument: Unexpected exception during parsing: '"
129 xercesc::XMLPlatformUtils::Terminate();
135 std::cerr <<
"\nErrors occured, no output available\n" << std::endl;
139 return parser->getDocument();
145 #if 0 // below no longer works in XERCES 3
147 xercesc::DOMImplementation *impl =
148 xercesc:: DOMImplementationRegistry::getDOMImplementation(
X(
"LS"));
149 static xercesc::DOMBuilder* scratchBuilder=0;
150 xercesc::DOMBuilder* builder;
153 builder = ((xercesc::DOMImplementationLS*)impl)->createDOMBuilder(
154 xercesc::DOMImplementationLS::MODE_SYNCHRONOUS, 0);
156 else if (scratchBuilder == 0)
158 builder = scratchBuilder = ((xercesc::DOMImplementationLS*)impl)->
159 createDOMBuilder(xercesc::DOMImplementationLS::MODE_SYNCHRONOUS,
164 builder = scratchBuilder;
168 builder->setFeature(xercesc::XMLUni::fgDOMValidation,
true);
169 builder->setFeature(xercesc::XMLUni::fgDOMNamespaces,
true);
170 builder->setFeature(xercesc::XMLUni::fgDOMDatatypeNormalization,
true);
171 builder->setFeature(xercesc::XMLUni::fgDOMEntities,
false);
172 builder->setFeature(xercesc::XMLUni::fgXercesSchemaFullChecking,
true);
173 builder->setFeature(xercesc::XMLUni::fgXercesSchema,
true);
176 builder->setErrorHandler(&errHandler);
178 xercesc::DOMDocument* doc = 0;
181 builder->resetDocumentPool();
182 doc = builder->parseURI(xmlFile.c_str());
183 #if defined FIX_XERCES_getElementById_BUG
184 xercesc::DOMWriter* writer = ((xercesc::DOMImplementationLS*)impl)->
186 xercesc::LocalFileFormatTarget* lfft =
187 new xercesc::LocalFileFormatTarget(
X(tmpFileS));
188 writer->writeNode(lfft,*(doc->getDocumentElement()));
191 builder->resetDocumentPool();
192 doc = builder->parseURI(
X(tmpFileS));
195 catch (
const xercesc::XMLException& toCatch) {
196 std::cout <<
"Exception message is: \n" << toCatch.getMessage() <<
"\n";
199 catch (
const xercesc::DOMException& toCatch) {
200 std::cout <<
"Exception message is: \n" << toCatch.msg <<
"\n";
204 std::cout <<
"Unexpected Exception \n" ;
210 std::cerr <<
"\nErrors occured, no output available\n" << std::endl;
232 XString systemId(e.getSystemId());
233 XString message(e.getMessage());
235 <<
"\nparseInputDocument: Error at file " <<
S(systemId)
236 <<
", line " << e.getLineNumber()
237 <<
", char " << e.getColumnNumber()
238 <<
"\n Message: " <<
S(message) << std::endl;
244 XString systemId(e.getSystemId());
245 XString message(e.getMessage());
247 <<
"\nparseInputDocument: Fatal Error at file " <<
S(systemId)
248 <<
", line " << e.getLineNumber()
249 <<
", char " << e.getColumnNumber()
250 <<
"\n Message: " <<
S(message) << std::endl;
255 XString systemId(e.getSystemId());
256 XString message(e.getMessage());
258 <<
"\nparseInputDocument: Warning at file " <<
S(systemId)
259 <<
", line " << e.getLineNumber()
260 <<
", char " << e.getColumnNumber()
261 <<
"\n Message: " <<
S(message) << std::endl;
283 if (domError.getSeverity() == xercesc::DOMError::DOM_SEVERITY_WARNING)
284 std::cerr <<
"\nWarning at file ";
285 else if (domError.getSeverity() == xercesc::DOMError::DOM_SEVERITY_ERROR)
286 std::cerr <<
"\nError at file ";
288 std::cerr <<
"\nFatal Error at file ";
291 <<
XString(domError.getLocation()->getURI()).c_str()
292 <<
", line " << domError.getLocation()->getLineNumber()
293 <<
", char " << domError.getLocation()->getColumnNumber()
294 <<
"\n Message: " <<
XString(domError.getMessage()).c_str()
314 string fname = xmlFile;
315 size_t pos = fname.find_last_of(
'/');
316 if(pos != string::npos){
317 path = fname.substr(0,pos) +
"/";
343 char *my_publicId_ptr = xercesc::XMLString::transcode(publicId);
344 my_publicId = my_publicId_ptr;
345 xercesc::XMLString::release(&my_publicId_ptr);
348 char *my_systemId_ptr = xercesc::XMLString::transcode(systemId);
349 my_systemId = my_systemId_ptr;
350 xercesc::XMLString::release(&my_systemId_ptr);
385 if(!ifs.is_open())
continue;
388 ifs.seekg (0, ios::end);
389 unsigned int length = ifs.tellg();
390 ifs.seekg (0, ios::beg);
393 char *buff =
new char [length];
396 ifs.read (buff,length);
409 char hex_output[16*2 + 1];
410 for(
int di = 0; di < 16; ++di)
sprintf(hex_output + di * 2,
"%02x", digest[di]);
MyEntityResolver(const XString &xmlFile)
sprintf(text,"Post KinFit Cut")
xercesc::DOMDocument * buildDOMDocument(const XString &xmlFile, bool keep)
void md5_init(md5_state_t *pms)
xercesc::DOMDocument * parseInputDocument(const XString &xmlFile, bool keep)
std::vector< std::string > xml_filenames
void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
std::vector< std::string > GetXMLFilenames(void)
void error(const xercesc::SAXParseException &e)
bool getSawErrors() const
bool getSawErrors() const
void fatalError(const xercesc::SAXParseException &e)
void md5_finish(md5_state_t *pms, md5_byte_t digest[16])
void warning(const xercesc::SAXParseException &e)
bool handleError(const xercesc::DOMError &domError)
std::string GetMD5_checksum(void)
xercesc::InputSource * resolveEntity(const XMLCh *const publicId, const XMLCh *const systemId)
std::string last_md5_checksum
const XString basename() const