Zwei XML-Dateien vergleichen

Hallo Leute,

ich möchte gerne die Position von einem Knoten in einem dom tree erhalten. Bin mir nicht sicher, aber denke, dass sollte irgendwie mit XPath möglich sein.

<page>
  <line>
    <wd> bla </wd>
    <wd> blabla </wd>
  </line>
  <line>
    <wd> lorem </wd>
    <wd> ipsum </wd>
    <wd> dolor </wd>
    <wd> sit </wd>
  </line>
</page>

So sieht ca. mein Code aus und nun möchte ich zum einen für einen Knoten eine Funktion haben welche mir beispielsweise für “ipsum”: 2. Wortknoten, 2. Lineknoten, 1. Page ausspuckt. Das selbe würde ich gern auch umgekehrt können, also auf den 2. Wortknoten, 2. Lineknoten, 1. Page in einem anderen Dokument z.b. zugreifen.
Das zweite ist, denke ich mit XPath positional predicates möglich, bin mir aber auch nicht sicher. Beim ersten habe ich überhaupt keine Ahnung.

Danke euch,

cheers

Also das “ipsum” auszuwählen ist mit xpath ganz einfach möglich. Die zweite Frage verstehe ich nicht so ganz.

Zeig mal deinen versuch das mit xpath auszulesen, dann kann ich dir weiterhelfen.

Also: ich habe einen

org.w3c.dom.Node node

und mehr noch nicht. Weiß leider nicht wie ich den in XPath reinpacken soll. Finde immer nur die andere Richtung, also von XPath zu Node aber nie von Node zu XPath.
Ziel ist es, zwei Dokumente, wie oben beschrieben zu vergleichen. Das heißt ich iteriere über ein Dokument, habe also eine

List<org.w3c.dom.Node>

und möchte dann nachschauen, was an der selben Position im Baum, in einem anderen Dokument steht.

Hi,

ich glaube, dass das trivial nur anhand der XML/XPath nicht möglich ist.

Ich würde hierzu zwei Maps erstellen.

Bei der einen bekommst du für Ipsum den Pfad zum Ipsum und bei der anderen aus dem Pfad „ipsum“.

Gruß

Martin

Das ist ja doof. Gibt’s nicht etwas einfacheres bzw. effizienteres?

Grüße und danke erstmal

Da es um Java zu scheinen geht und eher um das Vergleichen zweier Dateien habe ich das Thema mal umbenannt.

Ja stimmt, geht um java. Würde sich demzufolge eine Lösung finden?

Grüße

Naja kommt drauf an, wie das letztendlich ausschaut. Den XPath zusammenzubauen dürfte nicht schwer sein
//(root-element)/child[position()=?]/child[position()=?] (usw)
Wenn es dir also ausreicht, diesen beim iterieren des ersten Dokumentes beim zweiten auszuführen, dann kannst du dir die Map schenken. Aber wenn du die Daten länger brauchst würde ich zu Marcineks vorschlag raten - dieser macht die Sache eigentlich nicht wirklich komplizierter.

Also neben der beschriebenen Methode über die Hashmaps…

Kannst du auch beide Dateien parallel einlesen:

Document.getChilds()

und dann das gleiche auf der anderen XML.

Und die Ergebnisse entsprechend Speichern.

Gruß,

Martin

[QUOTE=Tomate_Salat;25674]Naja kommt drauf an, wie das letztendlich ausschaut. Den XPath zusammenzubauen dürfte nicht schwer sein
//(root-element)/child[position()=?]/child[position()=?] (usw)
Wenn es dir also ausreicht, diesen beim iterieren des ersten Dokumentes beim zweiten auszuführen, dann kannst du dir die Map schenken. Aber wenn du die Daten länger brauchst würde ich zu Marcineks vorschlag raten - dieser macht die Sache eigentlich nicht wirklich komplizierter.[/QUOTE]

Aber wie bekomme ich von dem Knoten im ersten Dokument die position des Knotens? Könntest Du das Code Snippet noch etwas erweitern? Bin leider noch zu unerfahren.

Also ich hab folgendes:


XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(<xpath_expression>);

List<Node> example1Nodes;
List<Node> example2Nodes;

for( Node n : example1Nodes){

    ??? 
    

    ???
}

Erstmal schonmal vielen Dank euch beiden