Правильный выход XML в Java

Мне нужно конвертировать CSV в XML, а затем в OutputStream. Правило конвертировать " в " в моем коде.

Введите строку CSV:

{"Test":"Value"}

Ожидаемый результат:

<root>
<child>{&quot;Test&quot;:&quot;Value&quot;}</child>
<root>

Токовый выход:

<root>
<child>{&amp;quot;Test&amp;quot;:&amp;quot;Value&amp;quot;}</child>
<root>

Код:

File file = new File(FilePath);
BufferedReader reader = null;

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder domBuilder = domFactory.newDocumentBuilder();

Document newDoc = domBuilder.newDocument();
Element rootElement = newDoc.createElement("root");
newDoc.appendChild(rootElement);

reader = new BufferedReader(new FileReader(file));
String text = null;

    while ((text = reader.readLine()) != null) {
            Element rowElement = newDoc.createElement("child");
            rootElement.appendChild(rowElement);
            text = StringEscapeUtils.escapeXml(text);
            rowElement.setTextContent(text);
            }

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Source xmlSource = new DOMSource(newDoc);
Result outputTarget = new StreamResult(outputStream);
TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget);
System.out.println(new String(baos.toByteArray()))

Не могли бы вы помочь? Что я скучаю и когда & преобразовать в &amp;?

1 ответ

Решение

Библиотека XML будет автоматически экранировать строки, которые должны быть экранированы XML, поэтому вам не нужно вручную экранировать, используя StringEscapeUtils.escapeXml, Просто удалите эту строку, и вы получите именно то, что ищете для правильно экранированного XML.

XML не требует " символы для экранирования везде, только внутри значений атрибутов. Так что это действительный XML уже:

<root>
<child>{"Test":"Value"}</child>
<root>

Вы бы избежали кавычек, если бы у вас был атрибут, который содержал кавычку, например: <child attr="properly &quot;ed"/>

Это одна из основных причин использования библиотеки XML: тонкости цитирования уже обработаны для вас. Не нужно читать спецификацию XML, чтобы убедиться, что вы правильно указали правила цитирования.

Другие вопросы по тегам