2012-03-22 19 views
10

Parece que no entiendo el propósito de XMLString::transcode(XMLCh*) y XMLString::transcode(char*), porque obviamente no entiendo la diferencia entre XMLCh* y char*. ¿Puede alguien hacer las cosas más claras para mí?Propósito de XMLString :: transcode

Respuesta

19

Xerces codifica información como UTF-16 internamente. Los datos UTF-16 se almacenan utilizando el tipo de datos XMLCh.

'C-style' cadenas usan char que está en la página de códigos locales (probablemente UTF-8, pero depende de la plataforma y la configuración) Usas transcode para convertir entre los dos.

Por ejemplo, si desea alimentar algunos datos de Xerces a otra biblioteca y esa biblioteca espera texto en la página de códigos locales, necesita transcode. Además, si tiene char datos y desea alimentarlo a Xerces, necesita transcode a XMLCh, porque eso es lo que entiende Xerces.

Por ejemplo:

// to local code page 
DOMNode *node = ...; 
char* temp = XMLString::transcode(node->getNodeValue()); 
std::string value(temp); 
XMLString::release(&temp); 

// from local code page 
DOMElement *element = ...; 
XMLCh *tag = XMLString::transcode("test"); 
DOMNodeList *list = element->getElementsByTagName(tag); 
XMLString::release(&tag); 

No se olvide de soltar la cuerda! Mejor es escribir una envoltura alrededor de él, pero hay examples disponible en internet (solo busque una clase llamada XercesString).

Si desea saber más acerca de codificaciones Creo que deberías leer The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

+0

gracias que fue muy útil! – Glolita

+0

¡Agregar algunas líneas de código como ejemplo ayudará mucho a otros lectores como yo! – Jaywalker