Сохраняйте числовые символы, такие как `& # 10; & # 13; `при разборе XML в Java
Я анализирую XML, который содержит числовые символьные символы, такие как (но не ограничиваясь) < >
(перевод строки <>) в Java. При разборе я добавляю текстовое содержимое узлов в StringBuffer, чтобы позже записать его в текстовый файл.
Однако эти символы Юникода разрешаются или преобразуются в символы новой строки / пробелы, когда я записываю строку в файл или распечатываю ее.
Как я могу сохранить исходные символы символов числовых сущностей при итерации по узлам XML-файла в Java и сохранении узлов текстового содержимого в строку?
Пример демонстрационного XML-файла:
<?xml version="1.0" encoding="UTF-8"?>
<ABCD version="2">
<Field attributeWithChar="A string followed by special symbols " />
</ABCD>
Пример кода Java. Он загружает XML, выполняет итерации по узлам и собирает текстовое содержимое каждого узла в StringBuffer. После завершения итерации он записывает StringBuffer на консоль, а также в файл (но нет
) символы.
Как можно сохранить эти символы при сохранении их в строку? Не могли бы вы мне помочь? Спасибо.
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());
}
}