2016-06-13 1 views
5

Cela m'a dérangé pendant des jours. J'ai juste besoin de savoir quels sont les nœuds manquants dans le second xml en comparaison. J'ai essayé xmlunit mais cela ne m'aide pas vraiment à trouver le noeud manquant puisqu'il compare ligne par ligne. deux échantillons xml ci-dessous: xml1:Comparer deux xml et trouver le noeud manquant en utilisant Java

<test testcase="101"> 
    <value="1"> 
    <value="2"> 
    <value="3"> 
</test> 

xml2:

<test testcase="101"> 
    <value="3"> 
    <value="2"> 
</test> 

Notez que la valeur = 3 est en fait il y a dans la deuxième copie juste obtenir au premier noeud mais je considère qu'il n'a pas disparu . comment puis-je trouver la valeur du noeud manquant = "1"?

+1

Vous pouvez comparer 'list' des valeurs: http://stackoverflow.com/questions/919387/how-can-i-calculate -la-différence-entre-deux-arraylists – Berger

+1

Quelle est la taille du xml? –

+0

Les valeurs de vos nœuds sont-elles uniques? Si c'est le cas, le 'Set' pourrait être une meilleure option que' List'. –

Répondre

0

Je dois essayer travaille

package WebInitalizar; 
import java.util.List; 

import org.custommonkey.xmlunit.DetailedDiff; 
import org.custommonkey.xmlunit.XMLUnit; 
import org.junit.Assert; 

public class TestXml { 

    public static void main(String[] args) throws Exception { 
     String result = "<test testcase=\"101\"><value1>10</value1></test>"; 
     // will be ok 
     assertXMLEquals("<test testcase=\"1010\"><value1>10</value1><value2>10</value2></test>", result); 
    } 

    public static void assertXMLEquals(String expectedXML, String actualXML) throws Exception { 
     XMLUnit.setIgnoreWhitespace(true); 
     XMLUnit.setIgnoreAttributeOrder(true); 

     DetailedDiff diff = new DetailedDiff(XMLUnit.compareXML(expectedXML, actualXML)); 

     List<?> allDifferences = diff.getAllDifferences(); 
     System.out.println(allDifferences); 
     Assert.assertEquals("Differences found: "+ diff.toString(), 0, allDifferences.size()); 
    } 

}