DOMImplementationLS сериализуется в строку в UTF-8 в Java - PullRequest
13 голосов
/ 28 октября 2009

при чтении документации для java org.w3c.dom.ls кажется, что элемент можно сериализовать только в строку с кодировкой нативной строки Java, UTF-16 Однако мне нужно создать строку UTF-8, экранированную или нет, я понимаю, что это все еще будет строка UTF-16. У кого-нибудь есть идея обойти это? Мне нужно, чтобы строка передавалась сгенерированному клиенту WS, который будет использовать String, тогда это должен быть UTF-8.

код, который я использую для создания строки:

DOMImplementationRegistry domImplementationRegistry = DOMImplementationRegistry.
DOMImplementationLS domImplementationLS = (DOMImplementationLS) REGISTRY.getDOMImplementation("LS");
LSSerializer writer = domImplementationLS.createLSSerializer();
String result = writer.writeToString(element);

Ответы [ 2 ]

17 голосов
/ 03 мая 2013

Вы все еще можете использовать 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();
8 голосов
/ 28 октября 2009

Я считаю, что наиболее гибкий способ сериализации DOM в String - это использование javax.xml.transform API:

    Node node = ...
    StringWriter output = new StringWriter();

    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.transform(new DOMSource(node), new StreamResult(output));

    String xml = output.toString();

Это не особенно элегантно, но должно дать вам лучший контроль над выходной кодировкой.

...