2013-11-26 90 views
1

我有一个字符串内容,其中包含(其他文本)一些XML。我想在这个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内被替换?

回答

1

小心使用字符串等快捷方式,甚至对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解析器。对一个共同的 身份转换/复制例程进行一个简单的修改,除了您希望替换的元素/属性值之外,其他所有的东西都会回显为 。
2

难道你不能试图获得String cn = "CreditCard Number="的索引,然后替换从那里开始并从那里去16个字符的子字符串(信用卡号码的长度)向前?

或者我错了,假设你有整个头字符串?

你也可以使用正则表达式进行模式匹配。

+0

这可能适用于在狭义上定义的上下文中的快速和肮脏的解决方案,但请注意其[**显着限制**](http://stackoverflow.com/a/20219284/290085 )。 – kjhughes