You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现XML Writer时如何去除自动添加的
转义符?

解决Java XML Writer生成 转义符的问题

你遇到的
是XML对**回车符(\r)**的转义表示,这个符号要么是加密后字符串本身携带的,要么是XML Transformer在处理换行时额外引入的。下面给你两种针对性的解决办法:

方法一:清理输入字符串中的回车符

最直接的方式是在把加密内容添加到XML文本节点前,主动移除字符串里的\r字符。修改你代码中创建BeneficiaryInformation节点的部分:

// BeneficiaryInformation elements
Element beneficiaryInformation = doc.createElement("BeneficiaryInformation");
// 清理字符串中的回车符
String cleanedEncryptedValue = encryptedValue.get(counter).replace("\r", "");
beneficiaryInformation.appendChild(doc.createTextNode(cleanedEncryptedValue));
records.appendChild(beneficiaryInformation);

如果locationHash或ids也存在类似的回车符问题,同样可以用replace("\r", "")来清理。

方法二:配置Transformer统一换行格式

另一种可能是XML Transformer在生成缩进时,默认使用了CRLF(\r\n)作为换行符,导致回车符被转义。你可以通过设置输出属性强制使用LF(\n)作为换行符,避免转义:

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// 开启格式化输出
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// 设置缩进空格数(可选,让格式更美观)
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
// 强制使用LF作为换行符,避免CR被转义
transformer.setOutputProperty(OutputKeys.LINE_SEPARATOR, "\n");

问题根源说明


对应ASCII中的回车符(Carriage Return,\r),在XML规则里,除换行符(Line Feed,\n)之外的空白字符会被自动转义。如果你的加密逻辑输出内容包含\r,或者Transformer默认用CRLF作为换行分隔符,就会出现这个转义符号。你可以先检查加密后的字符串是否自带\r,再选择对应的解决方法。

内容的提问来源于stack exchange,提问作者apoellitsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:27:15