Java: преобразование строки в документ (W3C) без декодирования - PullRequest
1 голос
/ 22 мая 2019

Когда я конвертирую XML в формате String в Document, все значения узлов со значениями Numeric Character Reference (NCR) декодируются в удобочитаемые для человека значения.

Я хочу получить точно такой же XML в выводе (без декодирования NCR).Желаемый результат:

"<urn:Root xmlns:urn=\"http://my.test.com/ABC\"><urn:Status type=\"\">&#1042; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077;</urn:Status></urn:Root>"

Но я получаю:

"<urn:Root xmlns:urn=\"http://my.test.com/ABC\"><urn:Status type=\"\">В работе</urn:Status></urn:Root>"

Пример: Output

public static void main(String[] args) {
    String xml = "<urn:Root xmlns:urn=\"http://my.test.com/ABC\"><urn:Status type=\"\">&#1042; &#1088;&#1072;&#1073;&#1086;&#1090;&#1077;</urn:Status></urn:Root>";
    System.out.println(xml);
    System.out.println(convertStringToXMLDocument(xml));
} 


public static String convertStringToXMLDocument(String xml) {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    factory.setIgnoringElementContentWhitespace(true);
    factory.setExpandEntityReferences(false);
    DocumentBuilder builder = null;


    try(InputStream s = new ByteArrayInputStream(xml.getBytes())) {
        builder = factory.newDocumentBuilder();
        Document doc = builder.parse(s);
        return convertXMLDocumentToString(doc);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}


public static String convertXMLDocumentToString(Document xmlDocument) {
    TransformerFactory factory = TransformerFactory.newInstance();
    Transformer transformer;
    try {
        transformer = factory.newTransformer();
        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
        StringWriter writer = new StringWriter();
        transformer.transform(new DOMSource(xmlDocument), new StreamResult(writer));
        return writer.getBuffer().toString();
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    return null;
}
...