parseo - read xml in java sax
DOMImplementationLS se serializa a String en UTF-8 en Java (2)
Encuentro que la forma más flexible de serializar un DOM a String es usar la API javax.xml.transform
:
Node node = ...
StringWriter output = new StringWriter();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(node), new StreamResult(output));
String xml = output.toString();
No es especialmente elegante, pero debería darle un mejor control sobre la codificación de salida.
leyendo la documentación de java org.w3c.dom.ls, parece que un elemento solo se puede serializar a una cadena con la codificación de cadena nativa java, UTF-16. Sin embargo, necesito crear una cadena UTF-8, escapada o no, entiendo que todavía será una cadena UTF-16. Alguien tiene una idea para evitar esto? Necesito que la cadena pase a un cliente WS generado que consumirá la cadena, entonces debería ser UTF-8.
el código que uso para crear la cadena:
DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry.
DOMImplementationLS domImplementationLS = (DOMImplementationLS) REGISTRY.getDOMImplementation("LS");
LSSerializer writer = domImplementationLS.createLSSerializer();
String result = writer.writeToString(element);
Aún puede usar DOMImplementationLS
:
DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry.
DOMImplementationLS domImplementationLS = (DOMImplementationLS)REGISTRY.getDOMImplementation("LS");
LSOutput lsOutput = domImplementationLS.createLSOutput();
lsOutput.setEncoding("UTF-8");
Writer stringWriter = new StringWriter();
lsOutput.setCharacterStream(stringWriter);
lsSerializer.write(doc, lsOutput);
String result = stringWriter.toString();