智能差异化方法 XML
Intelligent Way to Diff XML
我正在使用一个像平台一样运行的程序,它创建它使用的对象的实例,并将它们以 xml 格式存储在数据库中。该程序有一种方法可以将这些对象的 "dump" 创建到 xml 集合中。
我希望在我们的生产环境和开发环境之间进行转储差异,以便能够确定它们之间的任何增量。
由于转储取决于数据库中项目的顺序,因此普通差异没有意义。我需要的是一种在比较之前在两个转储中对 xml 元素进行排序的方法,以便差异更智能并更准确地反映增量。
例如:
文件 1:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar1>stuff1</bar1>
<bar2>stuff2</bar2>
</foo>
文件 2:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar2>stuff2</bar2>
<bar1>stuff1</bar1>
</foo>
我正在寻找一种方法,使上述文件的差异不会产生差异,因为唯一的差异是白色 space 和 foo.
元素的子顺序
关于如何使用大文件完成此操作有什么想法吗?
以下适用于小文件:
使用 http://prettydiff.com/ 我可以通过确保选择 "Sort markup pieces" 选项来完成此操作。之后我能够区分上面的内容并且它显示了匹配项。
我需要在本地执行类似这样的操作,该操作适用于大小相当大的文件。
考虑一下,我想如果有一种方法可以从命令行对 xml 文件进行排序,那么我可以对这些文件进行比较。
我对我的想法进行的后续谷歌引导我得出以下结论:https://superuser.com/questions/79920/how-can-i-diff-two-xml-files
在上面,关键是canonical xml sort
。由于我使用的是 mac,上面给出了以下解决我的问题的方法,这对我有用:
$ xmllint --c14n File1.xml > 1.xml
$ xmllint --c14n File2.xml > 2.xml
$ diff 1.xml 2.xml
如果您使用的是 linux,或者正在使用诸如 cygwin installed/setup 和 windows 之类的软件,以上内容也适用于您。
我正在使用一个像平台一样运行的程序,它创建它使用的对象的实例,并将它们以 xml 格式存储在数据库中。该程序有一种方法可以将这些对象的 "dump" 创建到 xml 集合中。
我希望在我们的生产环境和开发环境之间进行转储差异,以便能够确定它们之间的任何增量。
由于转储取决于数据库中项目的顺序,因此普通差异没有意义。我需要的是一种在比较之前在两个转储中对 xml 元素进行排序的方法,以便差异更智能并更准确地反映增量。
例如:
文件 1:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar1>stuff1</bar1>
<bar2>stuff2</bar2>
</foo>
文件 2:
<?xml version="1.0" encoding="UTF-8"?>
<foo>
<bar2>stuff2</bar2>
<bar1>stuff1</bar1>
</foo>
我正在寻找一种方法,使上述文件的差异不会产生差异,因为唯一的差异是白色 space 和 foo.
元素的子顺序关于如何使用大文件完成此操作有什么想法吗?
以下适用于小文件:
使用 http://prettydiff.com/ 我可以通过确保选择 "Sort markup pieces" 选项来完成此操作。之后我能够区分上面的内容并且它显示了匹配项。
我需要在本地执行类似这样的操作,该操作适用于大小相当大的文件。
考虑一下,我想如果有一种方法可以从命令行对 xml 文件进行排序,那么我可以对这些文件进行比较。
我对我的想法进行的后续谷歌引导我得出以下结论:https://superuser.com/questions/79920/how-can-i-diff-two-xml-files
在上面,关键是canonical xml sort
。由于我使用的是 mac,上面给出了以下解决我的问题的方法,这对我有用:
$ xmllint --c14n File1.xml > 1.xml
$ xmllint --c14n File2.xml > 2.xml
$ diff 1.xml 2.xml
如果您使用的是 linux,或者正在使用诸如 cygwin installed/setup 和 windows 之类的软件,以上内容也适用于您。