JDom Object vergleich / compare XML

  • hallo, ich habe zwei probleme

    1.: ich will JDom objecte vergleichen, diese beinhalten xml elemente (siehe code fragment), ich habe nun das problem, dass die elemente, in meinen zu vergleichenden Objecten, nicht in einer bestimmten reihenfolge auftreten, daher auch nicht als gleich erkannt werden, obwohl sie eigentlich gleichen inhalt haben.

    2.: auch bei lösung des ersten problems stehe ich immer noch vor einem problem wenn "theoretisch" ein anderer namespace im element angegeben ist.

    Code
    <attributes xsi:type="dt:Attribute">
       <name>abc</name>
       <value>http://www...</value>
    </attributes>
    <attributes xsi:type="dt:Attribute">
       <name>xyz</name>
       <value>54321</value>
    </attributes>
  • Ich verstehe vielleicht das Problem nicht ganz. Was meinst du mit gleichem Inhalt? Was müsste in dem von dir angegebenen Code gleich sein wird aber nicht als gleich erkannt?

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

  • erstes Object beinhaltet:

    Code
    <attributes xsi:type="dt:Attribute">
       <name>abc</name>
       <value>http://www...</value>
    </attributes>
    <attributes xsi:type="dt:Attribute">
       <name>xyz</name>
       <value>54321</value>
    </attributes>

    zweites Object beinhaltet:

    Code
    <attributes xsi:type="dt:Attribute">
       <name>xyz</name>
       <value>54321</value>
    </attributes>
    <attributes xsi:type="dt:Attribute">
       <name>abc</name>
       <value>http://www...</value>
    </attributes>

    ich brauche eine möglichkeit diese beiden JDom Objects zu vergleichen (nur auf inhaltsgleichheit, nicht die unterschiede herausfiltern usw.), die reihenfolge der element hat für mich keine relevanz, bin nicht auf JDom festgelegt.

  • Ein Vorschlag wäre folgender:


    Wenn dieser Code beendet ist, gibt die Variable "gleich" an, ob die name-Elemente gleich sind oder nicht. Das selbe kannst du dann auch für value machen, und wenn beide "gleich" sind dann sind beide Objekte gleich. Ist zwar pseudocodig was ich da hab, aber vielleicht hilfts.

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

  • Zitat von pim


    ich brauche eine möglichkeit diese beiden JDom Objects zu vergleichen (nur auf inhaltsgleichheit, nicht die unterschiede herausfiltern usw.), die reihenfolge der element hat für mich keine relevanz, bin nicht auf JDom festgelegt.

    wow, überraschend kompliziert diese aufgabe. Man könnte doch meinen, dass zwei xml documente öfters verglichen werden müssten, und das bibliotheken wie jdom dafür funktionalität bereitstellen.

    wie auch immer, hier habe ich ein xslt stylesheet gefunden, das den job übernimmt. nicht getestet, aber damit lässt sich sicher etwas anfangen.

  • dank euch für eure vorschläge, ich hab halt irgendwie das problem, dass ich jedes neue object dann mit allen vorhandenen vergleichen muss.

    ich bräuchte irgendwie eine lösung die in die richtung eines "intelligenten" hash werts geht, nur für neues object was berechnen und dann mit den bereits vorhandenen werten vergleichen.

  • ich hätte jetzt einen neuen ansatz für mein problem und hoffe, dass mir wer von euch helfen kann,

    ich würde meinen vergleich gerne mit xpath realisieren, die idee:

    macht es sinn sich für jeden Knoten im Dom Object den xpath zu merken, und diese liste von xpath ausdrücken dann gegen das zweite Dom Object abzufragen?

  • Mit dem Produkt <xml>cmp kann man inbesondere große Xml-Dateien sehr effizient vergleichen (http://www.xmlcmp.de). Über eine Xml-Konfigurationsdatei kann man sehr detailliert definieren, welche Elemente/Attribute verglichen werden sollen, ob die Element-Reihenfolge relevant ist oder nicht, ob Konvertierungen vor dem Vergleich durchgeführt werden sollen etc.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!