替换XML内容中的值的最佳方法?

时间:2013-11-26 13:01:58

标签: java xml web-services

我有一个String内容,其中包含一些XML(以及其他文本)。我想在此XML中搜索应该屏蔽的敏感支付数据(例如信用卡号)。

字符串不是单个XML内容(我可以使用JAXB解析或使用dom遍历),但也包含其他值,如标题,例如:

Response-Code: 200 Encoding: ISO-8859-1 Content-Type: text/xml Headers: {connection=[Keep-Alive], ... <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP:Body> ... <ns2:Payment> <ns2:CreditCard Number="1234567723" />

使用value.replaceAll(".", "X");找到内容并替换数字的最佳效果是什么? 我的意思是,我怎样才能最好地在xml中找到要替换的值?

2 个答案:

答案 0 :(得分:2)

难道你不能尝试获取String cn = "CreditCard Number="的索引然后替换从那里开始的子字符串并从那里(信用卡号码的长度)转发16个字符吗?

或者我错误地认为你把整个标题作为一个字符串?

您还可以使用正则表达式进行模式匹配。

答案 1 :(得分:2)

小心使用字符串甚至正则表达式替换XML等快捷方式。您很容易错过很多变体:

  • Number可能会显示为除。之外的元素的属性 CreditCard
  • 无效的空格可能介入CreditCard之间 元素和Number属性。
  • XML中的属性顺序无关紧要,因此Number可以显示为 一次是第一个属性,另一个是另一个属性 场合。

另见Can you provide some examples of why it is hard to parse XML and HTML with a regex?

以正确的方式做到这一点并不难:

  1. 使用Web服务中的相应调用获取XML消息 框架,或者,如果必须,可以在词汇上向前扫描XML。
  2. 使用真正的XML解析器。对常见做一个简单的修改 身份转换/复制程序,回应一切 除了您要替换的元素/属性值。