|
Re: Parsing Using SAX: msg#00052text.xml.xerces-c.user
Ok, imgoing to use a map. Also I changed the catch statement, but there is still an error. Using the debugger it seems to break when i call parser->parse(XMLfile) Any ideas? -Alex Alberto Massari wrote: > > At 06.37 18/12/2006 -0800, appleGuy wrote: > >>Ok, cool >> >>Couldnt I use an STL Map to map the strings to Enums? > > Provided that you use std::wstring, yes > > >>Also currently my code compiles fine but i get a runtime error when >>executed. Its having problems with the parser->parse(XMLfile) bit. Is it >>because my handler class isnt completed or is there other problems. > > If you get a runtime error, it's probably because you have written > > catch(int debug /*Use Exception in class*/){ > cout << "ERROR OCCURED" << endl; > } > > Try catching XMLException&. If it doesn't work, try running your code > inside a debugger. > > Alberto > > > >>Thanks >>Alex >> >> >> >>Alberto Massari wrote: >> > >> > At 06.11 18/12/2006 -0800, appleGuy wrote: >> > >> >>Ok, ive found it in my library. >> >> >> >>Could you please do me a massive favour & show a step by step of your >> >>process. To be honest im not totally understanding your logic to >> achieve >>my >> >>goal. Also because its not documented its harder to impliment. >> > >> > Disclaimer: it's a totally untested code... >> > >> > #include <xercesc/util/StringPool.hpp> >> > >> > class myHandler : public DocumentHandler >> > { >> > [...] >> > virtual void startDocument(); >> > virtual void startElement >> > ( >> > const XMLCh* const name >> > , AttributeList& attrs >> > ); >> > >> > protected: >> > XMLStringPool _map; >> > }; >> > >> > void myHandler::startDocument() >> > { >> > _map.flushAll(); >> > _map.addOrFind(L"loopcardprj"); // id = 1 >> > _map.addOrFind(L"_prjsetup"); // id = 2 >> > _map.addOrFind(L"title"); // id = 3 >> > _map.addOrFind(L"author"); // id = 4 >> > _map.addOrFind(L"subject"); // id = 5 >> > _map.addOrFind(L"card"); // id = 6 >> > _map.addOrFind(L"_questions"); // id = 7 >> > _map.addOrFind(L"question"); // id = 8 >> > _map.addOrFind(L"q"); // id = 9 >> > _map.addOrFind(L"a"); // id = 10 >> > _map.addOrFind(L"comment"); // id = 11 >> > } >> > >> > void myHandler::startElement(const XMLCh* const name, AttributeList& >> > attrs) >> > { >> > switch(_map.getId(name)) >> > { >> > // place the code in the corresponding 'case' branch... >> > case 1: >> > case 2: >> > case 3: >> > case 4: >> > case 5: >> > case 6: >> > case 7: >> > case 8: >> > case 9: >> > case 10: >> > case 11: >> > } >> > } >> > >> > Alberto >> > >> > >> >>Many Thanks Alberto >> >> >> >>-Alex >> >> >> >> >> >>Alberto Massari wrote: >> >> > >> >> > At 04.41 18/12/2006 -0800, appleGuy wrote: >> >> > >> >> >>Ok, >> >> >> >> >> >>I cant seem to see XMLStringPool in the docs, there is a >> >> >>XMLSyncronisedStringPool... >> >> > >> >> > I guess it was treated as an internal helper class, as it is >> >> > explicitly removed from the doc generation step (while >> >> > XMLSyncronisedStringPool is a more recent class that escaped the >> >> > check...). You can use XMLSyncronisedStringPool (that derives from >> >> > XMLStringPool), or just include xercesc/util/StringPool.hpp and use >> >> > XMLStringPool... >> >> > >> >> > Alberto >> >> > >> >> >>??? >> >> >> >> >> >>-Alex >> >> >> >> >> >> >> >> >>Alberto Massari wrote: >> >> >> > >> >> >> > At 15.05 17/12/2006 -0800, appleGuy wrote: >> >> >> > >> >> >> >>Hi, >> >> >> >> >> >> >> >>Ive been getting there with this Sax buisness... >> >> >> >> >> >> >> >>Now my handler class is on the way (the problem I had earlier is >> >> >> sorted) >> >> >> >> >> >> >> >>However How do I make comparisons efficently using SAX...I mean >> when >> >> it >> >> >>get >> >> >> >>the tag, i need to compare it & find the right variable to assign >> >> the >> >> >> >>character data too (the data between the tags) >> >> >> > >> >> >> > I would add to my handler class an instance of type >> XMLStringPool, >> >> >> > initialize it by adding to it the names I am interested in (using >> >> >> > addOrFind), then use getId to convert the node name into one of >> >> these >> >> >> > known ids. >> >> >> > >> >> >> > Alberto >> >> >> > >> >> >> > >> >> >> >>Cheers >> >> >> >>Alex >> >> >> >> >> >> >> >> >> >> >> >>appleGuy wrote: >> >> >> >> > >> >> >> >> > Ok, >> >> >> >> > >> >> >> >> > Im going to include my code for this problem. >> >> >> >> > I get an error when the parse function is called: >> >> >> >> > parser->parse(XMLfile)....Ive got no idea why >> >> >> >> > >> >> >> >> > Also this was formed from the SaxCount Code included with the >> >> Xerces >> >> >> >> > distro. >> >> >> >> > >> >> >> >> > Currently I dont see it doing anything. I need to be able to >> >> change >> >> >> >> > variable & containers in the DocumentHandler Class >> >> >> >> > >> >> >> >> > Cheers >> >> >> >> > Alex >> >> >> >> > >> >> >> >> > >> >> >> >> > bool prjLoad::loadXML_prj(char *prj_filename){ >> >> >> >> > //Start XML Xerces Framework >> >> >> >> > try { >> >> >> >> > XMLPlatformUtils::Initialize(); >> >> >> >> > } >> >> >> >> > catch (const XMLException& toCatch) { >> >> >> >> > char* message = >> >> >> XMLString::transcode(toCatch.getMessage()); >> >> >> >> > cout << "Error during initialization! :\n" >> >> >> >> > << message << "\n"; >> >> >> >> > XMLString::release(&message); >> >> >> >> > return false; >> >> >> >> > } >> >> >> >> > >> >> >> >> > //Create New Parser (SAX) >> >> >> >> > SAXParser* parser = new SAXParser(); >> >> >> >> > >> >> >> >> > //File Input Validation >> >> >> >> > parser->setDoValidation(true); >> >> >> >> > parser->setDoNamespaces(true); >> >> >> >> > >> >> >> >> > //Create our SAX handler object and install it >> on >> >> >> >> the parser (Doc & >> >> >> >> > Error Handler) >> >> >> >> > //Using Project as Handler >> >> >> >> > parser->setDocumentHandler(prj); >> >> >> >> > parser->setErrorHandler(prj); >> >> >> >> > >> >> >> >> > //Load File through Xerces >> >> >> >> > XERCES_STD_QUALIFIER ifstream xmlFileHandle; >> >> >> >> > xmlFileHandle.open(prj_filename); >> >> >> >> > >> >> >> >> > //Load Each Line From File To Array xmlFile >> >> >> >> > bool flag = true; >> >> >> >> > while (flag == true) >> >> >> >> > { >> >> >> >> > char token[1000]; >> >> >> >> > //Set array to zeros >> >> >> >> > memset(token,0,sizeof(token)); >> >> >> >> > >> >> >> >> > //Sequential Search >> >> >> >> > if(!(xmlFileHandle.eof())){ >> >> >> >> > xmlFileHandle.getline(token, >> >> sizeof(token)); >> >> >> >> > >> >> >> >> > //Check If Line Contains Anything >> >> >> >> > if(!(token)) >> >> >> >> > continue; >> >> >> >> > else { >> >> >> >> > //Load into New Derived Variable >> >> >> >> for overloading & Safety >> >> >> >> > const char *XMLfile = token; >> >> >> >> > >> >> >> >> > //Debug >> >> >> >> > cout << "Parsing: " << XMLfile >> << >> >> >> endl; >> >> >> >> > >> >> >> >> > //ERROR WIPE -> NEEDS >> IMPLIMENTING >> >> >> >> > >> >> >> >> > try { >> >> >> >> > parser->parse(XMLfile); >> >> >> >> > } >> >> >> >> > catch(int debug /*Use Exception >> in >> >> >> >> class*/){ >> >> >> >> > cout << "ERROR OCCURED" >> << >> >> >> endl; >> >> >> >> > } >> >> >> >> > >> >> >> >> > } >> >> >> >> > >> >> >> >> > >> >> >> >> > } >> >> >> >> > //ELSE STATEMENT FOR EOF-> Set Flag to false >> >> >> >> therefore exiting while >> >> >> >> > loop >> >> >> >> > else >> >> >> >> > flag = false; >> >> >> >> > >> >> >> >> > >> >> >> >> > } >> >> >> >> > >> >> >> >> > return true; >> >> >> >> > } >> >> >> >> > >> >> >> >> > >> >> >> >> > appleGuy wrote: >> >> >> >> >> >> >> >> >> >> Its Ok, >> >> >> >> >> >> >> >> >> >> I needed to inheirt from the handlerbase class >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> Cheers >> >> >> >> >> ALEX >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> appleGuy wrote: >> >> >> >> >>> >> >> >> >> >>> Hi, >> >> >> >> >>> >> >> >> >> >>> Ive finally started to get going using Sax. Now im using the >> >> >> Samples >> >> >> >> to >> >> >> >> >>> help coding my own project. >> >> >> >> >>> >> >> >> >> >>> Looking at Sax Count, they seem to have created their own >> >> handler >> >> >> >> class >> >> >> >> >>> (saxcounthandler): >> >> >> >> >>> >> >> >> >> >>> SAXCountHandlers handler; >> >> >> >> >>> parser->setDocumentHandler(&handler); >> >> >> >> >>> parser->setErrorHandler(&handler); >> >> >> >> >>> >> >> >> >> >>> How can they do this as The type needed in >> setDocumentHandler >> >> >> needs >> >> >> >> to >> >> >> >> >>> be type DocumentHandler. >> >> >> >> >>> >> >> >> >> >>> When I try to use my custom class as a handler, it gives an >> >> >> >> error...what >> >> >> >> >>> is special about the SaxCountHandlers..? >> >> >> >> >>> >> >> >> >> >>> Ive used pointers,. they have dereferenced an object, surely >> im >> >> >> doing >> >> >> >> >>> the same thing? >> >> >> >> >>> >> >> >> >> >>> Many Thanks >> >> >> >> >>> Alex >> >> >> >> >>> >> >> >> >> >>> p.s: Also by DocumentHandler, what does this do exactly. Im >> >> >> thinking >> >> >> >> its >> >> >> >> >>> the controller for the parsing. I.e you can use the parsed >> data >> >> to >> >> >> >> >>> modify the handler and visa-versa >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >>> >> >> >> >> >> >> >> >> >> >> >> >> >> >> > >> >> >> >> > >> >> >> >> >> >> >> >>-- >> >> >> >>View this message in context: >> >> >> >>http://www.nabble.com/Parsing-Using-SAX-tf2835675.html#a7921219 >> >> >> >>Sent from the Xerces - C - Users mailing list archive at >> Nabble.com. >> >> >> > >> >> >> > >> >> >> > >> >> >> >> >> >>-- >> >> >>View this message in context: >> >> >>http://www.nabble.com/Parsing-Using-SAX-tf2835675.html#a7928122 >> >> >>Sent from the Xerces - C - Users mailing list archive at Nabble.com. >> >> > >> >> > >> >> > >> >> >> >>-- >> >>View this message in context: >> >>http://www.nabble.com/Parsing-Using-SAX-tf2835675.html#a7929328 >> >>Sent from the Xerces - C - Users mailing list archive at Nabble.com. >> > >> > >> > >> >>-- >>View this message in context: >>http://www.nabble.com/Parsing-Using-SAX-tf2835675.html#a7929765 >>Sent from the Xerces - C - Users mailing list archive at Nabble.com. > > > -- View this message in context: http://www.nabble.com/Parsing-Using-SAX-tf2835675.html#a7931976 Sent from the Xerces - C - Users mailing list archive at Nabble.com. |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Re: Parsing Using SAX: 00052, Alberto Massari |
|---|---|
| Next by Date: | Re: Was it something I said? (was: proper way to use Xerces for what I'm trying to do): 00052, Boris Kolpackov |
| Previous by Thread: | Re: Parsing Using SAXi: 00052, Alberto Massari |
| Next by Thread: | NetAccessorException on http "Moved permanently": 00052, Michael Weitzel |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |