1

XMLUnitのDetailedDiff関数を使用しているときに、特定のノードのみをチェックし、すべてのノードの違いをチェックしない方法

これは私のコードです:

public static void main(String[] args) 
    {
        //URL url1 = xmlunittest.class.getResource("MSHIS1.xml");
    //  URL url2 = xmlunittest.class.getResource("MSHIS.xml");

        Logger L = new Logger();

        FileReader fr1 = null;
        int countofdifferences = 0;
        FileReader fr2 = null;
        try {
            fr1 = new FileReader("MSHIS.xml");
            fr2 = new FileReader("MSHIS1.xml");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        try {
            Diff diff = new Diff(fr1, fr2);
            L.writeToBVTLOG("Similar? " + diff.similar());
            L.writeToBVTLOG("Identical? " + diff.identical());


            DetailedDiff detDiff = new DetailedDiff(diff);
            List differences = detDiff.getAllDifferences();
            for (Object object : differences) {
                Difference difference = (Difference)object;
                L.writeToBVTLOG("------------------------");
                L.writeToBVTLOG(difference.toString());
                L.writeToBVTLOG("------------------------");

                countofdifferences++;
            }

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


        L.writeToBVTLOG(countofdifferences);
    }

しかし、問題は、4つの特定のノードに変更が加えられたかどうかをプログラムに通知させたいということです。だから、すべての違いをリストすることからそこに到達する方法。

4

2 に答える 2

2

一部のノードを無視する(または一部のノードのみに注意を払う)独自のDifferenceListenerを実装し、差異をチェックするときにそれを使用するようにXMLUnitに指示することができます。「myelement」という名前の要素を無視するDifferenceListenerは次のとおりです。

public class IgnoreMyAttributeElements implements DifferenceListener()
{

      @Override
      public int differenceFound(Difference differenceIn)
      {
         Node controlNode = differenceIn.getControlNodeDetail().getNode();

         if(controlNode.getNodeType() == Node.ELEMENT_NODE)
         {
            if(controlNode.getLocalName().equals("myelement");
            {
               return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
            }
         }

         return DifferenceListener.RETURN_ACCEPT_DIFFERENCE;
      }

      @Override
      public void skippedComparison(Node nodeIn, Node nodeIn2)
      {
         //don't care about these events
      }
}

次に、それをDetailedDiffに渡します。

DetailedDiff diff =  new DetailedDiff(XMLUnit.compareXML(oldXml, newXml));
diff.overrideDifferenceListener(new IgnoreMyAttributeElements());
List<?> allDifferences = diff.getAllDifferences();
//do something with differences
于 2013-10-16T14:29:34.910 に答える
1

最初に両方のドキュメントをで変換しjavax.xml.transform.TransformerFactoryて、関心のあるノードのみが含まれるようにすることができます。または、DifferenceでgetControlNodeDetail()とgetTestNodeDetail()を使用して、必要なノードに違いが適用されるかどうかを確認できます。

于 2012-06-13T01:41:11.000 に答える