Laden...

XPath von XMLNode ermitteln?

Erstellt von naumann vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.390 Views
N
naumann Themenstarter:in
61 Beiträge seit 2005
vor 17 Jahren
XPath von XMLNode ermitteln?

Hi Leute,

gibt es irgendeine Möglichkeit mir den XPath zu einem XMLNode generieren zu lassen? Ich habe nämlich 2 XML Dokumente die ich ineinander verschmelzen lasse, d.h. wenn ich 2 XML Dok. mit der gleichen Struktur habe (nur andere Unterknoten) werden die unterschiedlichen Knoten aus Dokument A in Dokument B kopiert. Ungefähr so:

Dokument A:

<Personen>
<PersonA>
<Vorname>Robert</Vorname>
<Nachname>Naumann</Nachname>
</PersonA>
</Personen>

Dokument B

<Personen>
<PersonA>
<Adresse>Hauptstraße 1</Adresse>
</PersonA>
<PersonB>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Name>
</PersonB>
</Personen>

Jetzt wird Dokument B in Dokument A importiert. Es soll rauskommen:

<Personen>
<PersonA>
<Vorname>Robert</Vorname>
<Nachname>Naumann</Nachname>
<Adresse>Hauptstraße 1</Adresse>
</PersonA>
<PersonB>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Name>
</PersonB>
</Personen>

In dem Importvorgang muss ich also die Pfade mitteinander vergleichen. Nur wie bekommen ich diese raus? Ich habs mit dem XPathNavigator probiert. Der hat eine Funktion "ComparePosition" die eigentlich prüft ob zwei Pfadpositionen gleich sind. Diese gibt mir bei dem Vergleich der der beiden Pfade immer false zurück, möglicherweise weil die beiden Nodes aus zwei unterschiedlichen Dokumenten stammen. Deshalb brauche ich den XPath als string.

Hat einer ne Idee? Ich hab leider nichts gefunden.

476 Beiträge seit 2004
vor 17 Jahren

hallo naumann,

du kannst Dir den XPath rein theoretisch zusammenbauen in dem du die ParentNodes' durchläufst bis du beim Root-Knoten bist und dir über einen StringBuilder den XPath zusammen bauen, aber generell würde ich mir überlegen ob ich das Problem nicht auf andere Weise lösen könnte.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

N
naumann Themenstarter:in
61 Beiträge seit 2005
vor 17 Jahren

Bis jetzt mach ich das so, dass ich zwei Root Nodes an eine Funktion übergebe die bei einer Übereinstimmung die Childobjekte übergibt.

Ist halt nicht die prof. Lösung. Es gibt aber in keinem XML Objekt eine Funktion die den XPath ausgibt. Wie würdest du das Problem am besten lösen?

476 Beiträge seit 2004
vor 17 Jahren

hallo naumann,

wie ich das Problem lösen würde? Nuja, dazu müsste ich erstmal die Wurzel des Übels kennen, also den Grund warum Du das so machen willst. Meiner Erfahrung nach bietet sich beim transformieren von XML-Daten XSLT an. Da dir die entsprechenden Strukturen bekannt sind, sollte es relativ einfach sein entsprechende Templates zu schreiben.

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de