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
相关产品推荐
相关产品推荐

