使用Groovy脚本替换XML中的反斜杠为双引号
解决方案
核心思路
精准替换XML中InstdAmt标签的Ccy属性值前后的反斜杠为双引号,避免全局替换反斜杠破坏其他内容。优先用正则匹配特定模式,确保只修改目标位置的字符。
具体实现
Python
用正则匹配Ccy=\([A-Z]{3}\)模式,替换为带双引号的格式:
import re # 原始API返回的XML文本 raw_xml = '<Amt><InstdAmt Ccy=\USD\>4.38</InstdAmt></Amt>' # 执行替换 fixed_xml = re.sub(r'Ccy=\\([A-Z]{3})\\', r'Ccy="\1"', raw_xml) print(fixed_xml) # 输出结果:<Amt><InstdAmt Ccy="USD">4.38</InstdAmt></Amt>
处理批量响应时,直接对API返回的完整文本做替换后,再用标准XML库解析即可。
JavaScript
注意转义字符的处理,用全局正则完成替换:
const rawXml = '<Amt><InstdAmt Ccy=\\USD\\>4.38</InstdAmt></Amt>'; const fixedXml = rawXml.replace(/Ccy=\\([A-Z]{3})\\/g, 'Ccy="$1"'); console.log(fixedXml); // 输出结果:<Amt><InstdAmt Ccy="USD">4.38</InstdAmt></Amt>
Java
通过Pattern和Matcher实现正则替换:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class XmlFixer { public static void main(String[] args) { String rawXml = "<Amt><InstdAmt Ccy=\\USD\\>4.38</InstdAmt></Amt>"; Pattern pattern = Pattern.compile("Ccy=\\\\([A-Z]{3})\\\\"); Matcher matcher = pattern.matcher(rawXml); String fixedXml = matcher.replaceAll("Ccy=\"$1\""); System.out.println(fixedXml); // 输出结果:<Amt><InstdAmt Ccy="USD">4.38</InstdAmt></Amt> } }
注意事项
- 若API返回的反斜杠是转义后的字符(比如实际用
\\表示单个\),要调整正则中的转义层数,确保匹配准确。 [A-Z]{3}的正则能覆盖所有3位大写字母的货币代码(如EUR、GBP),无需针对单个币种修改。- 替换完成后,即可用常规XML解析库(如Python的
xml.etree.ElementTree、Java的DocumentBuilder)正常解析内容。
内容的提问来源于stack exchange,提问作者Indranisgt
相关产品推荐
相关产品推荐

