Si necesita incluir datos binarios o caracteres no válidos en los documentos XML, el método más seguro es codificar los datos como una serie binaria.
Codificaciones binarias para XML
hexBinary: <nonXMLChars>0001020304050607080B0C0E0F</nonXMLChars>
base64Binary: <nonXMLChars>AAECAwQFBgcICwwODw==</nonXMLChars>
La codificación base64Binary hace mejor uso de los caracteres XML disponibles, y de promedio, un campo binario codificado en base64 tiene como tamaño 2/3 del tamaño de su equivalente hexBinary. El formato MIME y diversos estándares basados en XML utilizan ampliamente Base64Binary.
Tal vez preferiría utilizar la codificación hexBinary más sencilla, si envía datos a aplicaciones que no pueden descodificar datos base64, y si el aumento en el tamaño de mensajes no es importante.
Análisis de datos binarios
Automáticamente, el analizador XMLNSC descodifica los datos hexBinary o base64Binary, guiándose por el tipo simple del elemento o atributo que contiene los datos binarios. El árbol de mensaje contendrá el valor BLOB descodificado.
Si utiliza el dominio XMLNS, deberá analizar los datos binarios como una serie. Aparece en el árbol de mensaje como un valor CHARACTER. Si los datos se codifican como hexBinary, puede utilizar la función ESQL CAST para convertirlos en un valor BLOB. Si los datos están condificados como base64Binary, el enfoque más fácil es utilizan la función BASE64DECODE. Para obtener más información, consulte Función BASE64DECODE.
Generación de datos binarios
Puede generar datos binarios en el XML de salida en codificación hexBinary o base64Binary.
Para hexBinary, utilice la sentencia ESQL para convertir los datos BLOB en una serie hexBinary.
-- Código ESQL para generar datos binarios codificados en base64
DECLARE myBLOB BLOB;
-- Llenar myBLOB con datos binarios
CREATE LASTCHILD OF OutputRoot.XMLNSC.message
TYPE BITOR(XMLNSC.Attribute, XMLNSC.base64Binary)
NAME myBase64Element
VALUE myBLOB;
Tenga en cuenta que si establece el tipo de campo en XMLNSC.base64Binary no cambiará el valor lógico en el árbol de mensajes. En el flujo de mensajes, sigue siendo un BLOB, y si solicita su representación de serie, ésta se notifica como una serie hexBinary. Sin embargo, cuando un árbol de mensajes se convierte en una corriente de bits (en un nodo de salida, o mediante una llamada a ASBITSTREAM), la conversión base64 se realiza de forma automática, y el XML de salida contiene la serie base64 correcta.