Когда я конвертирую XML в формате String в Document, все значения узлов со значениями Numeric Character Reference (NCR) декодируются в удобочитаемые для человека значения.
Я хочу получить точно такой же XML в выводе (без декодирования NCR).Желаемый результат:
"<urn:Root xmlns:urn=\"http://my.test.com/ABC\"><urn:Status type=\"\">В работе</urn:Status></urn:Root>"
Но я получаю:
"<urn:Root xmlns:urn=\"http://my.test.com/ABC\"><urn:Status type=\"\">В работе</urn:Status></urn:Root>"
Пример:
public static void main(String[] args) {
String xml = "<urn:Root xmlns:urn=\"http://my.test.com/ABC\"><urn:Status type=\"\">В работе</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;
}