Numerische Zeichenentitätszeichen wie `& # 10; & # 13; `beim Parsen von XML in Java

Ich analysiere XML, das numerische Zeichen enthält, Entitätszeichen wie (aber nicht beschränkt auf)&#10; &#13; &lt; &gt; (Zeilenvorschub Wagenrücklauf <>) in Java. Beim Parsen hänge ich den Textinhalt von Knoten an einen StringBuffer an, um ihn später in eine Textdatei zu schreiben.

Diese Unicode-Zeichen werden jedoch aufgelöst oder in Zeilenumbrüche / Leerzeichen umgewandelt, wenn ich die Zeichenfolge in eine Datei schreibe oder sie drucke.

Wie kann ich die ursprünglichen Symbole der numerischen Zeichenentität beibehalten, wenn ich über Knoten einer XML-Datei in Java iteriere und die Textinhaltsknoten in einem String speichere?

Beispiel einer Demo-XML-Datei:

<?xml version="1.0" encoding="UTF-8"?>
<ABCD version="2">    
    <Field attributeWithChar="A string followed by special symbols &#13;  &#10;" />
</ABCD>

Beispiel für Java-Code. Es lädt das XML, iteriert über die Knoten und sammelt den Textinhalt jedes Knotens in einem StringBuffer. Nachdem die Iteration beendet ist, schreibt es den StringBuffer in die Konsole und auch in eine Datei (aber kein&#10; &#13;) Symbole.

Was wäre eine Möglichkeit, diese Symbole beim Speichern in einem String beizubehalten? Kannst du mir bitte Helfen? Vielen Dank

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());
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage