Hallo zusammen, ich habe das folgende Problem bei der (im Forum bereits angesprochenen) Problemstellung zwei XML-Dateien zu vergleichen:
Ich habe ein Programm geschrieben, das die beiden XML-Files (wobei jedes Element ein Attribut names treeName haben muss, welches das Element identifiziert) und entweder true für identisch, oder false für unterschiedlich zurückgibt. Das Problem ist nur, dass wenn bei den Elementattributen ein Unterschied (sogar nur in der Anzahl) vorliegt, dieser nicht registriert wird.
Hier mein Code:
Kann mir jemand helfen?
Gruß
taouri
Ich habe ein Programm geschrieben, das die beiden XML-Files (wobei jedes Element ein Attribut names treeName haben muss, welches das Element identifiziert) und entweder true für identisch, oder false für unterschiedlich zurückgibt. Das Problem ist nur, dass wenn bei den Elementattributen ein Unterschied (sogar nur in der Anzahl) vorliegt, dieser nicht registriert wird.
Hier mein Code:
Code:
public static boolean testForEquality(String oldFile, String newFile)
throws JDOMException, IOException
{
SAXBuilder builder = new SAXBuilder();
Document oldXML = builder.build(oldFile);
Document newXML = builder.build(newFile);
Element oldRoot = oldXML.getRootElement();
Element newRoot = newXML.getRootElement();
return testRecursive(oldRoot, newRoot);
}
private static boolean testRecursive(Element oldElement, Element newElement)
{
if(oldElement.getChildren().size() != newElement.getChildren().size())
{
System.out.println("Differenz bei Anzahl Kinder");
return false;
}
if(!oldElement.getName().equals(newElement.getName()))
{
System.out.println("Differenz bei Name");
return false;
}
if(!oldElement.getText().equals(newElement.getText()))
{
System.out.println("Differenz bei Inhalt");
return false;
}
List oldAttributes = oldElement.getAttributes();
List newAttributes = newElement.getAttributes();
if(oldAttributes.size() != newAttributes.size())
{
System.out.println("Differenz bei Anzahl Attribute");
return false;
}
Iterator<Attribute> oldAttributesIterator = oldAttributes.iterator();
while(oldAttributesIterator.hasNext())
{
Attribute a = oldAttributesIterator.next();
String oldValue = a.getValue();
String newValue = newElement.getAttributeValue(a.getName());
if(!oldValue.equals(newValue))
{
System.out.println("Differenz bei Attributinhalt");
return false;
}
}
List<Element> children = oldElement.getChildren();
Iterator<Element> childrenIterator = children.iterator();
while(childrenIterator.hasNext())
{
Element oldChild = childrenIterator.next();
Element newChild = null;
List<Element> newChildren = newElement.getChildren();
Iterator<Element> newChildrenIterator = newChildren.iterator();
while(newChildrenIterator.hasNext())
{
Element currentChild = newChildrenIterator.next();
if(currentChild.getAttributeValue("treeName").equals(oldChild.getAttributeValue("treeName")))
{
newChild = currentChild;
}
}
System.out.println("in Schleife gelangt");
if(!testRecursive(oldChild, newChild))
{
return false;
}
}
return true;
}
Kann mir jemand helfen?
Gruß
taouri