Hi There,
use XMLString::transcode(localname) which will a pointer to a character
array.
Thanks
Pete
-----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]