2013-11-26 54 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