在不更改属性顺序的情况下获取 XML
Posted
技术标签:
【中文标题】在不更改属性顺序的情况下获取 XML【英文标题】:Fetching the XML without changing the order of the attributes 【发布时间】:2019-01-03 10:18:24 【问题描述】:我正在尝试从文件中获取 xml,但是在获取属性的顺序时正在改变 我知道这无关紧要,但在我的情况下它确实如此,因为我正在散列文档
我正在尝试下面的代码,但它按字母顺序排列属性
File fXmlFile = new File("C:\\Users\\Desktop\\abc.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
String xml=writer.toString();
这是我要阅读的 xml 在变量 xml 中,我得到的 xml 具有按字母顺序排序的属性
【问题讨论】:
当您以固定顺序获取属性时,这意味着您可以为结构相同的 XML 生成哈希值。但是,它不会检测到具有移动属性的相等 XML。那么为什么不对文件本身进行哈希处理呢?空白?对于 XML,您可能会尝试使用拉式解析器。 @JoopEggen 我实际上想从该 xml 中获取一个属性,将其存储,从 xml 中删除该属性,然后对其进行哈希处理 这意味着您需要文档内容模型的哈希,而不仅仅是文件。为此,您需要计算它们的规范形式(无论哪种类型最适合您),然后计算它的哈希值。他们通过列出按名称排序的属性来解决您描述的问题。 会试试这个并更新 【参考方案1】:属性顺序在 XML 中没有意义,处理 XML 的工具可以随意更改顺序。
当您比较文档的等价性时(您似乎正在这样做),那么您应该使用不依赖于属性顺序的比较和哈希函数。
【讨论】:
会试试这个。谢谢。以上是关于在不更改属性顺序的情况下获取 XML的主要内容,如果未能解决你的问题,请参考以下文章