在 Java 中正确转义 xml

Correct xml escaping in 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;?

XML 库会自动转义需要 XML 转义的字符串,因此您无需使用 StringEscapeUtils.escapeXml 手动转义。只需删除该行,您应该 正是您要查找的内容 正确转义 XML.

XML 不需要 " 字符在任何地方转义,只在属性值内转义。所以这已经有效 XML:

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

如果您有一个包含引号的属性,您将转义引号,例如:<child attr="properly &quot;ed"/>

这是使用 XML 库的主要原因之一:已经为您处理了引用的微妙之处。无需阅读 XML spec 即可确保您的引用规则正确无误。