空格感知XML的读/写

时间:2015-11-30 09:58:51

标签: java xml parsing formatting whitespace

我需要更改受源代码控制的XML文件的某些元素,并编写没有其他差异的文件,以便开发人员轻松查看更改。

详细说明我有一组元素需要在xml代码中有一个id属性。我发现这些元素带有xpath表达式并为其添加ID。但是当再次写入dom时,格式有点不同。

  1. 属性的顺序是按字母顺序更改
  2. 将命名空间的定义移至元素(<ns1:root xmlns:ns1="abc" xmlns:ns2="xzy"><ns2:element/></ns1:root>更改为<root xmlns="abc"><element xmlns="xzy"/></root>
  3. 换行和改变
  4. 使用javax.xml.parsers.SAXParser(namespaceaware:true)读取xml,并使用javax.xml.transform.TransformerFactory(缩进:是)编写。

    保留格式化的最好方法是改变源字符串,有没有一种好方法可以做到这一点而不会深入到xml解析内容?

    或者有没有办法将xml解析为dom空格?

1 个答案:

答案 0 :(得分:0)

  

属性的顺序是按字母顺序更改

根据规范,属性的顺序无关紧要。如果您构建了一个依赖于XML文件中属性顺序的软件,那么该软件就会破碎,简单明了。

  

命名空间的定义被移动到元素

这也是无关紧要的。

  

换行和改变

这就是这个。

  

保留格式的最佳方法是更改​​源字符串

绝对不是。不要这样做,这在每个级别上都是错误的。 XML解析器很复杂,因为XML解析是一件复杂的事情。如果它像执行一堆字符串搜索和替换操作一样简单,那么XML解析器就可以做到这一点,而不是复杂。

当它创建的DOM相同时,XML是相同的。有无数种方法可以序列化DOM。如果你的程序的任何部分依赖于DOM的序列化表示,而不是DOM本身,你就有错。

在任何情况下,大多数序列化程序都会提供一些影响其行为的设置。如果您使用具有相同配置的相同序列化程序,那么您可以期望获得可预测的结果。这可能有点帮助(即在将文件检入源控制系统时),但它不应该成为在代码级别开始依赖它的理由。