问题 比较XML忽略子元素的顺序


有没有人知道比较两个XML文档的工具。嘲笑那个......还有更多。我需要一些东西来确保文件1中的每个节点也在文件2中,而不管顺序如何。我认为XML Spy会使用忽略子节点顺序选项,但事实并非如此。以下内容将被视为相同:

<Node>
    <Child name="Alpha"/>
    <Child name="Beta"/>
    <Child name="Charlie"/>
</Node>

<Node>
    <Child name="Beta"/>
    <Child name="Charlie"/>
    <Child name="Alpha"/>
</Node>

11217
2017-11-19 22:31


起源

正是我在寻找什么。那么哪种比较工具可以处理这个重要的细微差别? - snahl


答案:


你可能想谷歌“XML diff工具“,这将给你带来更多的结果。 其中之一是 OxygenXml,我经常使用的工具。您也可以尝试微软 XML差异和补丁工具

祝你好运。


5
2017-11-19 22:42



谷歌搜索并没有像我希望的那样产生任何免费的有希望的可执行文件下载。但是,XML Diff和Patch Tool上的+1!它要求您使用Visual Studio来构建它以获取.exe。对于一个很好的可视化格式的xml diff,构建/ Samples / XmlDiffView项目,然后运行XmlDiffView [-flags] 1.xml 2.xml visual-output.html - HaterTot
OxygenXML是否支持OP请求?它是如何配置的? - Dead.Rabit
OxygenXml忽略属性顺序,但似乎没有忽略子元素顺序... - thisarattr
此时此页面是谷歌搜索的最佳结果 diff xml ignore order of child nodes。 - Mateusz Konieczny


我为此编写了一个简单的python工具 xmldiffs

比较两个XML文件,忽略元素和属性顺序。

用法: xmldiffs [OPTION] FILE1 FILE2

任何额外的选项都会传递给 diff 命令。

得到它 https://github.com/joh/xmldiffs


5
2018-03-22 23:54





我用了 XMLUnit测试 因为它可以满足不同顺序的元素。


2
2018-04-11 13:23



我用这种方法取得了不同程度的成功(XmlUnit 1和2)。它经常工作,但它有时会失败(对于除了排序顺序之外明显相同的XML对)。 - Charles Roth
如果他们真的是相同的,除了排序顺序,听起来它可能是一个错误。值得检查是否存在问题并报告,如果您可以轻松复制它。 - Chris R


今天晚上我有类似的需求,找不到符合我要求的东西。

我的解决方法是对我想要的两个XML文件进行排序,按元素名称的字母顺序排序。一旦它们处于一致的顺序,我就可以使用常规的可视化差异工具来区分两个已排序的文件。

如果这种方法听起来对其他任何人都有用,我就已经分享了我编写的python脚本来进行排序 http://dalelane.co.uk/blog/?p=3225 


1
2017-10-06 02:12





作为一种(非常)快速而肮脏的方法,我在紧要关头做到了这一点:

  1. 打开Excel
  2. 将文件1粘贴到A列中,每行一行。将范围命名为“FILE1”
  3. 将文件2粘贴到B列,每行一行。将范围命名为“FILE2”
  4. 在C1中,输入公式:

    =IF(ISERROR(VLOOKUP(B1,FILE1,1,FALSE)),"DIFF","")
    
  5. 在D1中,输入论坛:

    =IF(ISERROR(VLOOKUP(A1,FILE2,1,FALSE)),"DIFF","")
    
  6. 将列C和D填入文件底部。

这将突出显示在一个文件中而不是另一个文件中的任何行。任何方面都不整齐,但有时候你只需要处理你所拥有的东西。


1
2018-01-21 08:40





超越比较 你可以在 File Formats - 设置 XML Sort 转换。使用此选项,XML子项将在diff之前排序。

Beyond Compare的路径/便携版本是 可得到


1
2017-12-15 12:41





/**
     * @author sdiallo
     * @since 2017-01-16
     * <p>
     * Compare the content of two XML file
     * </p>
     * <ul>
     * <li>Ignore the white space</li>
     * <li>Ignore the attribute order</li>
     * <li>Ignore the comment</li>
     * <li>Ignore Sequence child nodes are not the same</li>
     * <ul>
     * 
     * @param String XML
     *            first Content to be compared
     * @param String XML
     *            second Content to be compared
     * @return List the differences computed between the two files
     *         <ul>
     *         <li>null means the files are equal</li>         
     *         <li>elsewhere the files are different</li>
     *         <ul>
     * */
    public static List buildDiffXMLs(String xmlExpected, String xmlGenerated) {
        List<?> differencesList = null;

    XMLUnit.setIgnoreAttributeOrder(true);
    XMLUnit.setIgnoreComments(true);
    XMLUnit.setIgnoreWhitespace(true);

    try {
        DetailedDiff diff = new DetailedDiff(XMLUnit.compareXML(
                xmlExpected, xmlGenerated));

        // Two documents are considered to be "similar" if they contain the
        // same elements and attributes regardless of order.
        if ( !diff.identical() && !diff.similar()) {
            differencesList = diff.getAllDifferences();
        }// end if

    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return differencesList;
}// buildDiffXMLs

0
2018-01-16 12:12



提示:请花1分钟来正确格式化 所有 你的代码;也许在那里做一个初步的解释。 - GhostCat