据我所知,标准 API 没有公开转义机制。您可能需要编写自己的 XML 发射器。
如果您不介意 3rd 方 API,则可以使用JDOM。就像是:
XMLOutputter outputter = new XMLOutputter() {
@Override
public String escapeAttributeEntities(String sequence) {
// TODO: bug: code only works for Basic Multilingual Plane
StringBuilder out = new StringBuilder();
for (int i = 0; i < sequence.length(); i++) {
process(sequence.charAt(i), out);
}
return out.toString();
}
private void process(char codePoint, StringBuilder out) {
if (codePoint == '"' || codePoint == '\'' || codePoint == '&'
|| codePoint == '<' || codePoint == '>' || codePoint > 127) {
out.append("&#");
out.append(Integer.toString(codePoint));
out.append(";");
} else {
out.append(codePoint);
}
}
};
outputter.setFormat(Format.getPrettyFormat().setEncoding("US-ASCII"));
Element foo = new Element("foo").setAttribute("msg",
"he will \"x\" this if needed");
Document doc = new Document().setRootElement(foo);
outputter.output(doc, System.out);
这发出:
<?xml version="1.0" encoding="US-ASCII"?>
<foo msg="he will "x" this if needed" />
(在执行此操作之前,我仍然会先检查一下XML 规范,并修复字符处理以支持U+FFFF 以上的字符。)