10 #include "GaudiKernel/MsgStream.h"
12 #include "xercesc/util/PlatformUtils.hpp"
13 #include "xercesc/util/XMLException.hpp"
14 #include <xercesc/dom/DOM.hpp>
15 #include <xercesc/framework/StdOutFormatTarget.hpp>
16 #include <xercesc/framework/LocalFileFormatTarget.hpp>
17 #include <xercesc/framework/MemBufInputSource.hpp>
18 #include <xercesc/parsers/XercesDOMParser.hpp>
19 #include <xercesc/util/XMLUni.hpp>
20 #include <xercesc/util/OutOfMemoryException.hpp>
24 using namespace xercesc;
34 :
IAGDDParser(),m_doc(0),m_parser(0),m_initialized(false),
40 :
IAGDDParser(
s),m_doc(0),m_parser(0),m_initialized(false),
47 bool errorsOccured =
false;
52 log<<MSG::WARNING<<
"ParseFile() - something wrong, could not find XML file "<<
s<<
endmsg;
63 catch (
const OutOfMemoryException&)
65 XERCES_STD_QUALIFIER cerr <<
"OutOfMemoryException" << XERCES_STD_QUALIFIER endl;
68 catch (
const XMLException&
e)
70 XERCES_STD_QUALIFIER cerr <<
"An error occurred during parsing\n Message: "
71 << XMLString::transcode(
e.getMessage()) << XERCES_STD_QUALIFIER endl;
74 catch (
const DOMException&
e)
76 const unsigned int maxChars = 2047;
77 XMLCh errText[maxChars + 1];
79 XERCES_STD_QUALIFIER cerr <<
"\nDOM Error during parsing: '" <<
s <<
"'\n"
80 <<
"DOMException code is: " <<
e.code << XERCES_STD_QUALIFIER endl;
82 if (DOMImplementation::loadDOMExceptionMsg(
e.code, errText, maxChars))
83 XERCES_STD_QUALIFIER cerr <<
"Message is: " << XMLString::transcode(errText) << XERCES_STD_QUALIFIER endl;
89 XERCES_STD_QUALIFIER cerr <<
"An error occurred during parsing\n " << XERCES_STD_QUALIFIER endl;
101 if (errorOccured)
return false;
107 const char*
str=
s.c_str();
108 MemBufInputSource memBuf ((
const XMLByte*)
str,strlen(
str),
"prodInfo",
false);
110 bool errorsOccured =
false;
116 catch (
const OutOfMemoryException&)
118 XERCES_STD_QUALIFIER cerr <<
"OutOfMemoryException" << XERCES_STD_QUALIFIER endl;
119 errorsOccured =
true;
121 catch (
const XMLException&
e)
123 XERCES_STD_QUALIFIER cerr <<
"An error occurred during parsing\n Message: "
124 << XMLString::transcode(
e.getMessage()) << XERCES_STD_QUALIFIER endl;
125 errorsOccured =
true;
127 catch (
const DOMException&
e)
129 const unsigned int maxChars = 2047;
130 XMLCh errText[maxChars + 1];
132 XERCES_STD_QUALIFIER cerr <<
"\nDOM Error during parsing: '" <<
s <<
"'\n"
133 <<
"DOMException code is: " <<
e.code << XERCES_STD_QUALIFIER endl;
135 if (DOMImplementation::loadDOMExceptionMsg(
e.code, errText, maxChars))
136 XERCES_STD_QUALIFIER cerr <<
"Message is: " << XMLString::transcode(errText) << XERCES_STD_QUALIFIER endl;
138 errorsOccured =
true;
142 XERCES_STD_QUALIFIER cerr <<
"An error occurred during parsing\n " << XERCES_STD_QUALIFIER endl;
143 errorsOccured =
true;
146 return errorsOccured;
149 const std::string&
s)
159 XMLString::transcode(
"LS 3.0 Core 2.0", tempStr, 99);
160 DOMImplementation*
implementation = DOMImplementationRegistry::getDOMImplementation(tempStr);
161 DOMLSSerializer* serializer = ((DOMImplementationLS*)
implementation)->createLSSerializer();
165 XMLFormatTarget*
target =
new LocalFileFormatTarget(
s.c_str());
166 DOMLSOutput* domoutput = ((DOMImplementationLS*)
implementation)->createLSOutput();
168 if(
m_doc->getDOMConfig()->canSetParameter(XMLUni::fgDOMComments,
true) )
m_doc->getDOMConfig()->setParameter(XMLUni::fgDOMComments,
false);
169 m_doc->normalizeDocument();
171 domoutput->setByteStream(
target);
172 serializer->write(
m_doc, domoutput);
173 domoutput->release();
174 serializer->release();
184 log<<MSG::WARNING<<
"navigateTree() - something is wrong! no document set! doing nothing!"<<
endmsg;
188 node =
dynamic_cast<DOMNode*
>(
m_doc->getDocumentElement());
189 if( !
node ) std::abort();
200 log<<MSG::WARNING<<
"Calling elementLoop() with NULL pointer!!!"<<
endmsg;
203 if (!(
e->getNodeType()==DOMNode::ELEMENT_NODE))
return;
209 stopLoop=
h->IsLoopToBeStopped();
215 char*
name=XMLString::transcode(
e->getNodeName());
218 for (child=
e->getFirstChild();child!=0;child=child->getNextSibling())
220 if (child->getNodeType()==DOMNode::ELEMENT_NODE) {
233 catch(
const XMLException &toCatch) {
234 XERCES_STD_QUALIFIER cerr <<
"Error during Xerces-c Initialization.\n"
235 <<
" Exception message:"
236 << XERCES_STD_QUALIFIER endl;
245 XMLPlatformUtils::Terminate();