在Java中为XML生成SHA-256哈希

时间:2017-04-23 13:19:05

标签: java xml hash sha256

我试图为http请求添加缓存功能(对于我的一个项目),我想使用Etag作为哈希值。但是如果Etag不在那里我想到使用有效载荷来生成唯一的哈希值。众所周知,相同的xml工资负载可能有不同的结构。例如 样本A和样本B相同 。但他们的字符串结构并不相同。我需要的是一种从两个xml样本生成相同哈希键的方法。

示例A

<note>
   <to>Tove</to>
   <from>Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this weekend!</body>
</note>

样本B

<note>
   <to>Tove</to>
   <heading>Reminder</heading>
   <from>Jani</from>
   <body>Don't forget me this weekend!</body>
</note>

1 个答案:

答案 0 :(得分:1)

order = '[{"item": 5, "quantity": 2},{"item": 6, "quantity": 1}]' def doSomething(): import json ord = json.loads(order) values =[ v['item'] for v in ord] # if u want a single item u put values = v.pop()['item'] 文档不会改变子元素的顺序。

可以通过递归解析文档来做到这一点。但是,请考虑这是否比您首先尝试缓存的操作更昂贵......

方法

  • 在每个级别将所有节点复制到org.w3c.dom.document.normalizeDocument()实现,即ArrayList。这是必需的,因为org.w3c.dom.NodeList不允许修改
  • 使用java.util.List
  • 对列表进行排序
  • 从父母那里删除孩子
  • 按排序顺序添加孩子

请注意,这不涉及具有不同内容的同名的多个元素,但确实解决了您的示例

例如:

Collections.sort()