Mantenga caracteres de entidad de caracteres numéricos como `& # 10; & # 13; `al analizar XML en Java
Estoy analizando XML que contiene caracteres de entidad de caracteres numéricos como (pero no limitado a) < >
(retorno de carro de avance de línea <>) en Java. Al analizar, agrego contenido de texto de nodos a un StringBuffer para luego escribirlo en un archivo de texto.
Sin embargo, estos caracteres Unicode se resuelven o transforman en nuevas líneas / espacios en blanco cuando escribo la Cadena en un archivo o la imprimo.
¿Cómo puedo mantener los símbolos de caracteres de entidad de caracteres numéricos originales al iterar sobre nodos de un archivo XML en Java y almacenar los nodos de contenido de texto en una Cadena?
Ejemplo de archivo xml de demostración:
<?xml version="1.0" encoding="UTF-8"?>
<ABCD version="2">
<Field attributeWithChar="A string followed by special symbols " />
</ABCD>
Ejemplo de código Java. Carga el XML, itera sobre los nodos y recopila el contenido de texto de cada nodo en un StringBuffer. Una vez finalizada la iteración, escribe StringBuffer en la consola y también en un archivo (pero no
) símbolos.
¿Cuál sería una manera de mantener estos símbolos al almacenarlos en una cadena? ¿Me podría ayudar? Gracias.
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {
DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance();
Document document = null;
DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder();
document = documentBuilder.parse(new File("path/to/demo.xml"));
StringBuilder sb = new StringBuilder();
NodeList nodeList = document.getElementsByTagName("*");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
NamedNodeMap nnp = node.getAttributes();
for (int j = 0; j < nnp.getLength(); j++) {
sb.append(nnp.item(j).getTextContent());
}
}
}
System.out.println(sb.toString());
try (Writer writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("path/to/demo_output.xml"), "UTF-8"))) {
writer.write(sb.toString());
}
}