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

Reply via email to