在 Java 中生成 XML 时转义特殊字符
2022-09-01 08:41:53
我正在尝试开发一个 XML 导出功能,以使我的应用程序用户能够以 XML 格式导出其数据。我已经准备好了这个功能,并一直工作到它在某些情况下开始失败。然后我意识到这是因为一些特殊字符需要编码。例如,数据可能包含 & 或 !或 %或 ' 或 # 等,这需要正确转义。我想知道是否有一个通用实用程序可以按照XML规范转义所有特殊字符。我在谷歌上找不到任何东西。
有没有类似的东西已经存在了?或者有没有其他方法可以做到这一点?
以下是我用来生成 XML 的代码
Document xmldoc = new DocumentImpl();
Element root = xmldoc.createElement("Report");
Element name= xmldoc.createElement((exportData.getChartName() == null) ? "Report" : exportData.getChartName());
if (exportData.getExportDataList().size() > 0
&& exportData.getExportDataList().get(0) instanceof Vector) {
// First row is the HEADER, i.e name
Vector name = exportData.getExportDataList().get(0);
for (int i = 1; i value = exportData.getExportDataList().get(i);
Element sub_root = xmldoc.createElement("Data");
//I had to remove a for loop from here. StackOverflow description field would not take that. :(
// Insert header row
Element node = xmldoc.createElementNS(null, replaceUnrecognizedChars(name.get(j)));
Node node_value = xmldoc.createTextNode(value.get(j));
node.appendChild(node_value);
sub_root.appendChild(node);
chartName.appendChild(sub_root);
}
}
}
root.appendChild(name);
// Prepare the DOM document for writing
Source source = new DOMSource(root);
// Prepare the output file
Result result = new StreamResult(file);
// Write the DOM document to the file
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result);`
示例 XML:
<Data>
<TimeStamp>2010-08-31 00:00:00.0</TimeStamp>
<[Name that needs to be encoded]>0.0</[Name that needs to be encoded]>
<Group_Average>1860.0</Group_Average>
</Data>