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

标签 java xml web-services

我有一个包含(在其他文本中)一些 XML 的字符串内容。我想在此 XML 内部搜索应屏蔽掉的敏感支付数据(例如信用卡号)。

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

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 中替换的这些值?

最佳答案

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

  • Number 可以作为属性出现在除以下元素之外的元素上 信用卡
  • 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 解析器。对一个common做一个简单的修改 回应一切的身份转换/复制例程 除了您希望替换的元素/属性值。

关于java - 替换 XML 内容中的值的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20217839/

相关文章:

java - 如何解决 Withings 开发者 API 刷新 token 在 4 小时内过期的问题?

java - 如何从服务器进行 Restful 调用?

java - 在 Bluemix 服务器上发布端点

c# - 在 ASP.NET 的 Web 服务中使用 session 状态

asp.net - 轮询与 AsyncCallback 回调 - 慢速 Web 服务的最佳方法?

java - 使 JavaFX 应用程序窗口外部元素在所有操作系统中保持相似

java - Okhttp java 11 异常

java - 如何在 CData (Java) 中包装 HTML 内容以进行 XSLT - XML 到 HTML

python - 在 sqlalchemy 中使用 postgresql xml 数据类型

c# - 在 WP8 应用程序中反序列化 XML