智能的Diff XML方法

时间:2016-12-02 15:56:22

标签: xml diff

我使用的程序就像一个平台,它创建了它使用的对象实例,并以xml格式存储在数据库中。该程序有一种方法可以将这些对象“转储”到xml集合中。

我希望在我们的生产环境和开发环境之间进行转储差异,以便能够确定它们之间的任何增量。

由于转储依赖于数据库中项目的顺序,因此正常的差异没有意义。我需要的是在比较之前在两个转储中对xml元素进行排序的方法,以便diff更加智能并更准确地反映增量。

例如:

文件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>

我正在寻找一种方法,其中上述文件的差异不会产生任何差异,因为唯一的区别是foo元素的空格和子顺序。

有关如何使用大文件完成此操作的任何想法?

以下适用于小文件:

使用http://prettydiff.com/我可以通过确保选择“排序标记片段”选项来实现此目的。在此之后,我能够将上述内容区分开来,并将其显示为匹配。

我需要在本地执行类似的操作,这些文件适用于可能相当大的文件。

1 个答案:

答案 0 :(得分:5)

考虑到这一点,我想是否有办法从命令行对xml文件进行排序,然后我就可以对文件进行差异化了。

我的跟进谷歌通过我的想法引导我到以下地方:https://superuser.com/questions/79920/how-can-i-diff-two-xml-files

在上面,关键是#outer { position: relative; background-color: lightgoldenrodyellow; margin: 0px; top: 0px; left: 0px; width: 300px; /* changes made */ height: 195px; display: flex; flex-direction: column; } #heading { background-color:palevioletred; display:block; text-align:center; } #container { position: relative; overflow: auto; background-color:aquamarine; /* height:160px; */ }。由于我使用的是mac,上面的内容为我提供了以下问题,这对我有用:

<div id="outer">
    <span id="heading">
        List of Data
    </span>
    <div id="container">
            <ul id="data">
                <li>Data Item 1</li>
                <li>Data Item 2. This data item requires more than 300 px of width and wraps as expected.</li>
                <li>Data Item 3</li>
                <li>Data Item 4</li>
                <li>Data Item 5</li>
                <li>Data Item 6</li>
                <li>Data Item 7</li>
                <li>Data Item 8</li>
                <li>Data Item 9</li>
                <li>Data Item 10. A vertical scrollbar has been added to the list div</li>
            </ul>
    </div>
</div>

如果您使用的是Linux,或者使用像cygwin一样安装/设置Windows,上面的内容也应该适合您。