You need a zero to terminate the string - element[f]=0; Allocate an extra byte for it too.
>-----Original Message----- >From: Andre Stock [mailto:[EMAIL PROTECTED] >Sent: 16 June 2004 10:54 >To: [EMAIL PROTECTED] >Subject: RE: Newbie Problems with Simple SAXParser > >When i get an event that an element was found, i take the >localname in my startElement method and try to put it in a >char array, like (don`t laugh, i`m new to c++!): >int f = XERCES_CPP_NAMESPACE::XMLString::stringLen(localname); > char *element = (char *)malloc ( f * sizeof(char)); > for (int i = 0; i < f;i++) > { > > element[i] = (char) localname [i]; > } > std::cout << "Found element..." << element << "\n"; > free(element); >When i run my application i get the name of my element, but >there are padding characters behind the actually elementname. >Is that due to a different encoding? (XMLCh*?) Is there a >method i have to call, which creates a string from the localname? >Thanks > >Andre > >> It was actually the namespace missing in the signature of >> startElement().I thought if Attributes.hpp is included and the >> namespace was declared in my application it should work! OK, >now i know better! >> Thank you very much indeed!!!!! >> Andre >> >> > Actually, Attributes.hpp should be included via >XMLReaderFactory.hpp. >> > Alby's on to the problem, though: the Attributes type is >not known. >> > I >> suspect >> > this is a namespace issue. Try >XERCES_CPP_NAMESPACE::Attributes (or >> > uncommenting "using namespace XERCES_CPP_NAMESPACE;", since your >> > code is building on Xerces). >> > >> > -----Original Message----- >> > From: Andre Stock [mailto:[EMAIL PROTECTED] >> > Sent: Tuesday, June 15, 2004 10:18 AM >> > To: [EMAIL PROTECTED] >> > Subject: Re: Newbie Problems with Simple SAXParser >> > >> > Hi, >> > I just took the startElement method from SAX2Count and >copied it to >> > my .hpp (the definition) and my .cpp file (declaration). I did the >> > same for the characters method from SAX2Count. When i compile my >> > project, the >> compiler >> > says that there is a ',' missing before '&'(in my .hpp and my .cpp >> file!). >> > How can that be? I copied both methods and chracters() is working >> > fine, while startElement(...) isn`t working! >> > >> > void CHandler::startElement(const XMLCh* const uri >> > , const XMLCh* const localname >> > , const XMLCh* const qname >> > , const Attributes& attrs) { >> > std:cout << "Found element..."; >> > } >> > >> > >> > Has anyone a sample code fragment for startElement? >> > Thanks >> > Andre >> > >> > > Hi Andre, >> > > you are missing a >> > > >> > > #include <xercesc/sax2/Attributes.hpp> >> > > >> > > in the CHandler.hpp file. >> > > >> > > Alberto >> > > >> > > At 13.43 15/06/2004 +0200, Andre Stock wrote: >> > > >Ok, you`re right i`m new to c++. But anyway i want to try to >> > > >write it >> > on >> > > my >> > > >own (or better with your help! ;-)) >> > > > >> > > >That`s the CXercesTest.cpp file: >> > > > >> > > >#include "stdafx.h" >> > > >#include "CXercesTest.h" >> > > >#include "CHandler.hpp" >> > > >#include <xercesc/util/PlatformUtils.hpp> #include >> > > ><xercesc/sax2/SAX2XMLReader.hpp> #include >> > > ><xercesc/sax2/XMLReaderFactory.hpp> >> > > >#include <xercesc/sax2/DefaultHandler.hpp> >> > > > >> > > > >> > > >using namespace XERCES_CPP_NAMESPACE; //using namespace std; >> > > > >> > > >//##ModelId=40C56B8B02DE >> > > >void CXercesTest::createXMLStream() { >> > > > >> > > >} >> > > > >> > > >//##ModelId=40C56BC8003E >> > > >int CXercesTest::parseDocument() >> > > >{ >> > > > try { >> > > > XMLPlatformUtils::Initialize(); >> > > > } >> > > > catch (const XMLException& toCatch) { >> > > > char* message = >> > XMLString::transcode(toCatch.getMessage()); >> > > > std::cout << "Error during >initialization! >> > :\n"; >> > > > std::cout << "Exception message is: \n" >> > > > << message << "\n"; >> > > > XMLString::release(&message); >> > > > return 1; >> > > > } >> > > > >> > > > SAX2XMLReader* parser = >> > > > XMLReaderFactory::createXMLReader(); >> > > > >> > > > >> > > > CHandler* defaultHandler = new CHandler(); >> > > > //DefaultHandler* defaultHandler = new >DefaultHandler(); >> > > > parser->setContentHandler(defaultHandler); >> > > > parser->setErrorHandler(defaultHandler); >> > > > try { >> > > > parser->parse("c:\\xmlFile.xml"); >> > > > } >> > > > catch (const XMLException& toCatch) { >> > > > char* message = >> > XMLString::transcode(toCatch.getMessage()); >> > > > std::cout << "Exception message is: \n" >> > > > << message << "\n"; >> > > > XMLString::release(&message); >> > > > return -1; >> > > > } >> > > > catch (const SAXParseException& toCatch) { >> > > > char* message = >> > XMLString::transcode(toCatch.getMessage()); >> > > > std::cout << "Exception message is: \n" >> > > > << message << "\n"; >> > > > XMLString::release(&message); >> > > > return -1; >> > > > } >> > > > catch (...) { >> > > > std::cout << "Unexpected >Exception \n" ; >> > > > return -1; >> > > > } >> > > > >> > > >} >> > > > >> > > >//##ModelId=40C56F5C0196 >> > > >CXercesTest::CXercesTest() >> > > >{ >> > > > this->createXMLStream(); >> > > > this->parseDocument(); >> > > >} >> > > > >> > > >I also created a file which inherits from DefaultHandler.hpp >> > > >which is >> > > called >> > > >CHandler.hpp: >> > > > >> > > >#include <xercesc/sax/SAXParseException.hpp> >> > > >#include <xercesc/sax2/DefaultHandler.hpp> #include <iostream> >> > > > >> > > > >> > > >class CHandler : public XERCES_CPP_NAMESPACE::DefaultHandler >> > > >{ >> > > >public: >> > > > CHandler(); >> > > > ~CHandler(); >> > > > void startDocument(); >> > > > void startElement ( >> > > > const XMLCh* const uri, >> > > > const XMLCh* const localname, >> > > > const XMLCh* const qname, >> > > > const Attributes& attrs >> > > > ); >> > > > >> > > > >> > > >}; >> > > > >> > > >and CHandler.cpp: >> > > >#include <xercesc/util/XercesDefs.hpp> #include >> > > ><xercesc/util/XMLString.hpp> #include "CHandler.hpp" >> > > > >> > > >//using namespace XERCES_CPP_NAMESPACE; >> > > > >> > > > >> > > >void CHandler::startDocument() >> > > >{ >> > > > std::cout<< "Parsing in progress...!"; } >> > > > >> > > >void CHandler::startElement( >> > > > const XMLCh* const uri, >> > > > const XMLCh* const localname, >> > > > const XMLCh* const qname, >> > > > const Attributes& attrs >> > > > ) >> > > >{ >> > > > std::cout << "Found element..."; } >> > > > >> > > >CHandler::CHandler() >> > > >{ >> > > >} >> > > >CHandler::~CHandler() >> > > >{ >> > > >} >> > > > >> > > >and there is the problem, the compiler says "missing >',' before '&' >> in >> > > the >> > > >CHandler.hpp and CHandler.cpp file. >> > > >Just for the sake of completeness there is another >class calling >> > > >the CXercesTest constructor. >> > > >I`m sorry bothering you, but i have to get it working as fast as >> > > possible... >> > > >when it`s to hard for me i`ll try the version with taking >> > > >SAXPrint >> and >> > > >modify it! >> > > >Thanks in advance! >> > > >Andre >> > > > >> > > >-- >> > > >"Sie haben neue Mails!" - Die GMX Toolbar informiert >Sie beim Surfen! >> > > >Jetzt aktivieren unter http://www.gmx.net/info >> > > >> > > >> > > >> > > >------------------------------------------------------------------ >> > > --- To unsubscribe, e-mail: >> > > [EMAIL PROTECTED] >> > > For additional commands, e-mail: [EMAIL PROTECTED] >> > > >> > >> > -- >> > +++ Jetzt WLAN-Router f�r alle DSL-Einsteiger und Wechsler +++ >> > GMX DSL-Powertarife zudem 3 Monate gratis* http://www.gmx.net/dsl >> > >> > >> > >-------------------------------------------------------------------- >> > - 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] >> > >> >> -- >> +++ Jetzt WLAN-Router f�r alle DSL-Einsteiger und Wechsler +++ >> GMX DSL-Powertarife zudem 3 Monate gratis* http://www.gmx.net/dsl >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> > >-- >"Sie haben neue Mails!" - Die GMX Toolbar informiert Sie beim Surfen! >Jetzt aktivieren unter http://www.gmx.net/info > > >--------------------------------------------------------------------- >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]
