ATLAS Offline Software
Loading...
Searching...
No Matches
XercesParser Class Reference

#include <XercesParser.h>

Inheritance diagram for XercesParser:
Collaboration diagram for XercesParser:

Public Member Functions

 XercesParser (XMLHandlerStore &xs)
 XercesParser (XMLHandlerStore &xs, const std::string &)
virtual ~XercesParser ()
virtual bool ParseFile (const std::string &) override
virtual bool ParseFileAndNavigate (AGDDController &c, const std::string &) override
virtual bool ParseString (const std::string &) override
virtual bool ParseStringAndNavigate (AGDDController &c, const std::string &) override
virtual bool WriteToFile (const std::string &) override
virtual void navigateTree (AGDDController &c) override
virtual void elementLoop () override
virtual void elementLoop (AGDDController &c, xercesc::DOMNode *) override
bool Initialize ()
bool Finalize ()

Protected Attributes

std::string m_fileName

Private Attributes

xercesc::DOMDocument * m_doc
xercesc::XercesDOMParser * m_parser
bool m_initialized
XMLHandlerStorem_xs

Detailed Description

Definition at line 18 of file XercesParser.h.

Constructor & Destructor Documentation

◆ XercesParser() [1/2]

XercesParser::XercesParser ( XMLHandlerStore & xs)

Definition at line 33 of file XercesParser.cxx.

34 : IAGDDParser(),m_doc(0),m_parser(0),m_initialized(false),
35 m_xs(xs)
36{
37}
xercesc::XercesDOMParser * m_parser
xercesc::DOMDocument * m_doc
XMLHandlerStore & m_xs

◆ XercesParser() [2/2]

XercesParser::XercesParser ( XMLHandlerStore & xs,
const std::string & s )

Definition at line 39 of file XercesParser.cxx.

40 : IAGDDParser(s),m_doc(0),m_parser(0),m_initialized(false),
41 m_xs(xs)
42{
43}

◆ ~XercesParser()

XercesParser::~XercesParser ( )
virtual

Definition at line 26 of file XercesParser.cxx.

27{
28 delete m_parser;
29 m_parser=0;
30 Finalize();
31}

Member Function Documentation

◆ elementLoop() [1/2]

void XercesParser::elementLoop ( )
overridevirtual

Implements IAGDDParser.

Definition at line 193 of file XercesParser.cxx.

193{}

◆ elementLoop() [2/2]

virtual void XercesParser::elementLoop ( AGDDController & c,
xercesc::DOMNode *  )
overridevirtual

Implements IAGDDParser.

◆ Finalize()

bool XercesParser::Finalize ( )

Definition at line 243 of file XercesParser.cxx.

244{
245 XMLPlatformUtils::Terminate();
246 m_initialized=false;
247 return 0;
248}

◆ Initialize()

bool XercesParser::Initialize ( )

Definition at line 227 of file XercesParser.cxx.

228{
229 try {
230 XMLPlatformUtils::Initialize();
231 }
232
233 catch(const XMLException &toCatch) {
234 XERCES_STD_QUALIFIER cerr << "Error during Xerces-c Initialization.\n"
235 << " Exception message:"
236 << XERCES_STD_QUALIFIER endl;
237 return 1;
238 }
239 m_initialized=true;
240 return 0;
241}

◆ navigateTree()

void XercesParser::navigateTree ( AGDDController & c)
overridevirtual

Implements IAGDDParser.

Definition at line 180 of file XercesParser.cxx.

181{
182 if (!m_doc) {
183 MsgStream log(Athena::getMessageSvc(), "XercesParser");
184 log<<MSG::WARNING<<"navigateTree() - something is wrong! no document set! doing nothing!"<<endmsg;
185 return;
186 }
187 DOMNode* node = 0;
188 node = dynamic_cast<DOMNode*>(m_doc->getDocumentElement());
189 if( !node ) std::abort();
190 elementLoop(c, node);
191}
#define endmsg
virtual void elementLoop() override
IMessageSvc * getMessageSvc(bool quiet=false)

◆ ParseFile()

bool XercesParser::ParseFile ( const std::string & s_in)
overridevirtual

Implements IAGDDParser.

Definition at line 45 of file XercesParser.cxx.

46{
47 bool errorsOccured = false;
48 m_fileName=s_in;
49 std::string s=PathResolver::find_file(s_in,"XMLPATH");
50 if (s.empty()) {
51 MsgStream log(Athena::getMessageSvc(), "XercesParser");
52 log<<MSG::WARNING<<"ParseFile() - something wrong, could not find XML file "<<s<<endmsg;
53 errorsOccured = true;
54 }
55 else
56 {
58 m_parser = new XercesDOMParser;
59 try
60 {
61 m_parser->parse(s.c_str());
62 }
63 catch (const OutOfMemoryException&)
64 {
65 XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl;
66 errorsOccured = true;
67 }
68 catch (const XMLException& e)
69 {
70 XERCES_STD_QUALIFIER cerr << "An error occurred during parsing\n Message: "
71 << XMLString::transcode(e.getMessage()) << XERCES_STD_QUALIFIER endl;
72 errorsOccured = true;
73 }
74 catch (const DOMException& e)
75 {
76 const unsigned int maxChars = 2047;
77 XMLCh errText[maxChars + 1];
78
79 XERCES_STD_QUALIFIER cerr << "\nDOM Error during parsing: '" << s << "'\n"
80 << "DOMException code is: " << e.code << XERCES_STD_QUALIFIER endl;
81
82 if (DOMImplementation::loadDOMExceptionMsg(e.code, errText, maxChars))
83 XERCES_STD_QUALIFIER cerr << "Message is: " << XMLString::transcode(errText) << XERCES_STD_QUALIFIER endl;
84
85 errorsOccured = true;
86 }
87 catch (...)
88 {
89 XERCES_STD_QUALIFIER cerr << "An error occurred during parsing\n " << XERCES_STD_QUALIFIER endl;
90 errorsOccured = true;
91 }
92 m_doc=m_parser->getDocument();
93 return errorsOccured;
94 }
95 return errorsOccured;
96}
std::string m_fileName
Definition IAGDDParser.h:31
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)

◆ ParseFileAndNavigate()

bool XercesParser::ParseFileAndNavigate ( AGDDController & c,
const std::string & s )
overridevirtual

Implements IAGDDParser.

Definition at line 97 of file XercesParser.cxx.

99{
100 bool errorOccured = ParseFile(s);
101 if (errorOccured) return false;
102 navigateTree(c);
103 return true;
104}
virtual bool ParseFile(const std::string &) override
virtual void navigateTree(AGDDController &c) override

◆ ParseString()

bool XercesParser::ParseString ( const std::string & s)
overridevirtual

Implements IAGDDParser.

Definition at line 105 of file XercesParser.cxx.

106{
107 const char* str=s.c_str();
108 MemBufInputSource memBuf (reinterpret_cast<const XMLByte*>(str),strlen(str),"prodInfo",false);
109 m_parser = new XercesDOMParser;
110 bool errorsOccured = false;
112 try
113 {
114 m_parser->parse(memBuf);
115 }
116 catch (const OutOfMemoryException&)
117 {
118 XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER endl;
119 errorsOccured = true;
120 }
121 catch (const XMLException& e)
122 {
123 XERCES_STD_QUALIFIER cerr << "An error occurred during parsing\n Message: "
124 << XMLString::transcode(e.getMessage()) << XERCES_STD_QUALIFIER endl;
125 errorsOccured = true;
126 }
127 catch (const DOMException& e)
128 {
129 const unsigned int maxChars = 2047;
130 XMLCh errText[maxChars + 1];
131
132 XERCES_STD_QUALIFIER cerr << "\nDOM Error during parsing: '" << s << "'\n"
133 << "DOMException code is: " << e.code << XERCES_STD_QUALIFIER endl;
134
135 if (DOMImplementation::loadDOMExceptionMsg(e.code, errText, maxChars))
136 XERCES_STD_QUALIFIER cerr << "Message is: " << XMLString::transcode(errText) << XERCES_STD_QUALIFIER endl;
137
138 errorsOccured = true;
139 }
140 catch (...)
141 {
142 XERCES_STD_QUALIFIER cerr << "An error occurred during parsing\n " << XERCES_STD_QUALIFIER endl;
143 errorsOccured = true;
144 }
145 m_doc=m_parser->getDocument();
146 return errorsOccured;
147}

◆ ParseStringAndNavigate()

bool XercesParser::ParseStringAndNavigate ( AGDDController & c,
const std::string & s )
overridevirtual

Implements IAGDDParser.

Definition at line 148 of file XercesParser.cxx.

150{
151 bool errorOccured = ParseString(s);
152 if (!errorOccured) navigateTree(c);
153 return true;
154}
virtual bool ParseString(const std::string &) override

◆ WriteToFile()

bool XercesParser::WriteToFile ( const std::string & s)
overridevirtual

Implements IAGDDParser.

Definition at line 156 of file XercesParser.cxx.

157{
158 XMLCh tempStr[100];
159 XMLString::transcode("LS 3.0 Core 2.0", tempStr, 99);
160 DOMImplementation* implementation = DOMImplementationRegistry::getDOMImplementation(tempStr);
161 DOMLSSerializer* serializer = static_cast<DOMImplementationLS*>(implementation)->createLSSerializer();
162 // if one wants a nicely indented file -- not in this case as it goes to the DB and be compressed
163 // DOMConfiguration* domconfig = serializer->getDomConfig();
164 // domconfig->setParameter(XMLUni::fgDOMWRTFormatPrettyPrint, true);
165 XMLFormatTarget* target = new LocalFileFormatTarget(s.c_str());
166 DOMLSOutput* domoutput = static_cast<DOMImplementationLS*>(implementation)->createLSOutput();
167 // remove all comments
168 if( m_doc->getDOMConfig()->canSetParameter(XMLUni::fgDOMComments, true) ) m_doc->getDOMConfig()->setParameter(XMLUni::fgDOMComments, false);
169 m_doc->normalizeDocument();
170
171 domoutput->setByteStream(target);
172 serializer->write(m_doc, domoutput);
173 domoutput->release();
174 serializer->release();
175 delete target;
176
177 return true;
178}

Member Data Documentation

◆ m_doc

xercesc::DOMDocument* XercesParser::m_doc
private

Definition at line 36 of file XercesParser.h.

◆ m_fileName

std::string IAGDDParser::m_fileName
protectedinherited

Definition at line 31 of file IAGDDParser.h.

◆ m_initialized

bool XercesParser::m_initialized
private

Definition at line 38 of file XercesParser.h.

◆ m_parser

xercesc::XercesDOMParser* XercesParser::m_parser
private

Definition at line 37 of file XercesParser.h.

◆ m_xs

XMLHandlerStore& XercesParser::m_xs
private

Definition at line 39 of file XercesParser.h.


The documentation for this class was generated from the following files: