See my comments inlined below. > Hi, I've got a very easy xerces-c implementation: > > If the DOCTYPE statement is included in my XML file, the code crashes, > if not, it works perfecty. > > I cannot find any reason, why my code crashes!? Given that I don't do > the catch(...) stuff, and I don' set an ErrorHandler, I get a > segmentation faul. If I set the ErroHandler, it's "only" aborted. > Uncommenting the catch(...) part again, catches this exception of course.
I do not get a segmentation fault. I do get a SAXParseException on the dtd (see below). > > The filenames are not misspelled and the program, the dtd and the xml > files are in the same directory. May cwd is the same as the directory > conaing those three files when executing the program. > > > I've compiled xerces-c myself on my Fedora Core 2 Distro with gcc 3.3.3, > why I am not blaming any binary incompatibilities. > > > Thanks for any hint ! > > Boris > > Here's my code: > > > > ######### test.cpp ########## > > > #include <iostream> > #include <xercesc/dom/DOM.hpp> > #include <xercesc/parsers/XercesDOMParser.hpp> > #include <xercesc/sax/HandlerBase.hpp> > #include <xercesc/util/XMLString.hpp> > #include <xercesc/util/PlatformUtils.hpp> > > using namespace std; > using namespace xercesc; > > int main(){ > > try { > XMLPlatformUtils::Initialize(); > } > catch(const XMLException& exc){ > char* message = XMLString::transcode(exc.getMessage()); > cerr << "Error: " << message << endl; > XMLString::release(&message); > return 1; > } > > XercesDOMParser *parser = new XercesDOMParser(); > parser->setValidationScheme(XercesDOMParser::Val_Always); > > ErrorHandler *errHandler = new HandlerBase(); > parser->setErrorHandler(errHandler); > > char *filename = "samplemap.xml"; > > try{ > cout << "I'm alive" << endl; > parser->parse(filename); > cout << "I'm still alive" << endl; > } > catch(const XMLException& exc){ > char* message = XMLString::transcode(exc.getMessage()); > cerr << "Exception occured: " << message << endl; > XMLString::release(&message); > return 1; > } > catch(const DOMException& exc){ > char* message = XMLString::transcode(exc.msg); > cerr << "Exception occured: " << message << endl; > XMLString::release(&message); > return 1; > } > catch(...){ > cerr << "unexpected exception !!" << endl; > return 1; > } > > delete parser; > delete errHandler; > > return 0; > > } > > > > ################ thd DTD ####################### > > > <?xml version="1.0" encoding="UTF-8" ?> > > ELEMENT map (street) > ATTLIST map proportions CDATA #REQUIRED > > > > ELEMENT street(#PCDATA) The SAXParseException I get states that there should be a space between 'street' and '(#PCDATA)'. After adding this space, the program runs without errors. > ATTLIST street width CDATA #REQUIRED > > > > > > ############ The sample xml file ########## > > <?xml version="1.0" encoding="UTF-8" ?> > > <!-- crashes if not commented out --> > <!DOCTYPE map SYSTEM "TrafficRoadmap.dtd" []> > > <map proportions="640x480"> > <street width="20" > > </street> > </map> > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]