在 Java 中正确转义 xml
Correct xml escaping in Java
我需要将 CSV 转换为 XML,然后再转换为 OutputStream。规则是在我的代码中将 "
转换为 "
。
输入 CSV 行:
{"Test":"Value"}
预期输出:
<root>
<child>{"Test":"Value"}</child>
<root>
当前输出:
<root>
<child>{&quot;Test&quot;:&quot;Value&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()))
你能帮忙吗?我想念什么以及什么时候 &
转换为 &
?
XML 库会自动转义需要 XML 转义的字符串,因此您无需使用 StringEscapeUtils.escapeXml
手动转义。只需删除该行,您应该 正是您要查找的内容 正确转义 XML.
XML 不需要 "
字符在任何地方转义,只在属性值内转义。所以这已经有效 XML:
<root>
<child>{"Test":"Value"}</child>
<root>
如果您有一个包含引号的属性,您将转义引号,例如:<child attr="properly "ed"/>
这是使用 XML 库的主要原因之一:已经为您处理了引用的微妙之处。无需阅读 XML spec 即可确保您的引用规则正确无误。
我需要将 CSV 转换为 XML,然后再转换为 OutputStream。规则是在我的代码中将 "
转换为 "
。
输入 CSV 行:
{"Test":"Value"}
预期输出:
<root>
<child>{"Test":"Value"}</child>
<root>
当前输出:
<root>
<child>{&quot;Test&quot;:&quot;Value&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()))
你能帮忙吗?我想念什么以及什么时候 &
转换为 &
?
XML 库会自动转义需要 XML 转义的字符串,因此您无需使用 StringEscapeUtils.escapeXml
手动转义。只需删除该行,您应该 正是您要查找的内容 正确转义 XML.
XML 不需要 "
字符在任何地方转义,只在属性值内转义。所以这已经有效 XML:
<root>
<child>{"Test":"Value"}</child>
<root>
如果您有一个包含引号的属性,您将转义引号,例如:<child attr="properly "ed"/>
这是使用 XML 库的主要原因之一:已经为您处理了引用的微妙之处。无需阅读 XML spec 即可确保您的引用规则正确无误。