2005/11/19, Axel Weiß <[EMAIL PROTECTED]>:
> Alberto Massari wrote:
> > 3) if you don't option 2, you have to do the conversion at runtime
> > using a transcoder, like in
> >
> > const XMLCh* gFileToTrap=XMLString::transcode("personal.dtd");
> >
> > Don't forget to delete the string by using
> > XMLString::release(&gFileToTrap); also, you must allocate it after
> > XMLPlatformUtils::initialize and deallocate it before
> > XMLPlatformUtils::terminate.
>
> Hi Rafael,
>
> I have good experience in using a little wrapper class around XMLCh. I
> called it XML_Char, and I use it like the following examples:
>
> XML_Char empty; // empty string
> XML_Char text("hello"); // initialized from const char*
> XML_Char attr = node->getAttribute(XML_Char("id"));
> // initialized from const XMLCh*
> XML_Char copy(text); // copy constructor
> empty = text; // assignment
> text = "go away"; // implicit construction and assignment
>
> Each object of the XML_Char class has a representation in char* and in
> XMLCh*, and the destructor/assignment operator keeps track of freeing
> the memory used. The class has inlined
>
> operator const XMLCh*() const
> operator const char*() const
>
> referencing operators, so you can use the objects simultaneously as const
> char*- or const XMLCh*-strings. Additionally, I have some convenience
> operators like
>
> unsigned len() const // equ. to strlen(.)
> operator bool () const // test if string is empty
> char operator[](unsigned i) const // indexing (rarely used)
> friend std::ostream &operator<<(std::ostream &o, const XML_Char &c)
> // stream output
>
> There are some disadvantages, which must be kept in mind when using
> XML_Char:
> - you can't declare global objects, since XMLPlatformUtils::initialize
> will be called _after_ construction, and the conversion during
> construction will crash the program.
> - there's some overhead, resulting from the dual representation, which
> is not used in every scenario.
> - undefined behaviour when the string contains letters which are not
> representable in the local code page. This can be eliminated by
> using
> utf-8 as the local encoding.
>
> The reason why I use this class in all my xerces-related projects, are
> the advantages:
> - no memory leaks due to string handling/transcoding
> - automatic transcoding between XMLCh and local code page
> - convenient string handling when dealing with DOM/SAX.
> - the whole class is inlined (header file only)
> - the implementation is optimized for _my_ needs ;)
>
> Rafael, if you are a lazy guy, you may ask me for a copy of the class
> XML_Char - it's open source. But if you are keen, you sit down and write
> your own, it will take you little effort (and you can optimize it for
> _your_ needs).
>
> Cheers,
> Axel
>
>
And one last thing, in msvc.net you can use the basic_string template
with XMLCh like this:
typedef basic_string<XMLCh> MyXmlString;
This gives you the full functionality of the string class for xml characters.
--
Ivan