【问题标题】:Xml Parsing and ComparisonXml解析和比较
【发布时间】:2013-09-05 06:38:43
【问题描述】:

我有两个 Xml:-

String xmlA="<user><name>Jai</name><age>31</age><dob>28March1990</dob></user>";
String xmlB="<user><name>Jai Singh</name><age>31</age><dob>28March1990</dob></user>";

现在解析和比较之后,我想在下面显示结果 顺序:-

姓名:Jai JaiSingh

年龄:31 31

出生日期:28March1990 28March1990

我的问题: 解决这个问题的最简单方法是什么?

在这种情况下我可以使用 xmlUnit 进行比较吗?

【问题讨论】:

    标签: java xmlunit


    【解决方案1】:

    使用 xmlunit

    创建两个 xml 文档并使用 Diff 进行比较。 DifferenceEngine 接受 DifferenceListener。你可以在那里添加你的逻辑。

            Diff diff = new Diff(docx1, docx2);
            DifferenceEngine engine = new DifferenceEngine(diff);
    
            ElementQualifier qualifier = new RecursiveElementNameAndTextQualifier();
            diff = new Diff(docx1, docx2, engine, qualifier);
            diff.overrideDifferenceListener(new DifferenceListener()
            {
                @Override public int differenceFound(Difference difference)
                {
                    // Do some thing here
    
    
                }
    
                @Override public void skippedComparison(Node node, Node node1)
                {
                    //no op
                }
            });
    

    【讨论】:

      【解决方案2】:

      当然,如果你想比较两个 XML,你有一个 XML 单元,你可以逐个字符地进行。 XML Unit

      已编辑:

      您必须从这里XML Sourceforge 下载 de XMLUnit JAR,然后像 JUnit 一样简单地将其添加到您的类路径(通过 Eclipse / NetBeans / 等等...),然后您编写一个测试,像 JUnit 但扩展来自 XMLTestCase,像这样:

      import org.custommonkey.xmlunit.*;
      public class XMLTesting extends XMLTestCase {
      
      
       public void testForEquality() throws Exception {
              String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
              String myTestXML = "<msg><localId>2376</localId></msg>";
              assertXMLEqual("comparing test xml to control xml", myControlXML, myTestXML);
      
              assertXMLNotEqual("test xml not similar to control xml", myControlXML, myTestXML);
          }
      
          public void testIdentical() throws Exception {
              String myControlXML = "<struct><int>3</int><boolean>false</boolean></struct>";
              String myTestXML = "<struct><boolean>false</boolean><int>3</int></struct>";
              Diff myDiff = new Diff(myControlXML, myTestXML);
              assertTrue("pieces of XML are similar " + myDiff, myDiff.similar());
              assertTrue("but are they identical? " + myDiff, myDiff.identical());
          }
      
          public void testAllDifferences() throws Exception {
              String myControlXML = "<news><item id=\"1\">War</item>"
                  + "<item id=\"2\">Plague</item><item id=\"3\">Famine</item></news>";
              String myTestXML = "<news><item id=\"1\">Peace</item>"
                  + "<item id=\"2\">Health</item><item id=\"3\">Plenty</item></news>";
              DetailedDiff myDiff = new DetailedDiff(compareXML(myControlXML, myTestXML));
              List allDifferences = myDiff.getAllDifferences();
              assertEquals(myDiff.toString(), 0, allDifferences.size());
          }
      

      所以你可以看到比较两个 XML 的简单方法

      【讨论】:

      • 您能否进一步澄清一下?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 2018-06-30
      • 2020-10-05
      • 2014-12-26
      相关资源
      最近更新 更多