Laden...

XML Struktur korrigieren/ändern

Erstellt von el_vital vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.414 Views
E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 12 Jahren
XML Struktur korrigieren/ändern

verwendetes Datenbanksystem: XML

Hallo,
ich soll XML Daten aus einem Export einer Fremdsoftware lesen und weiter verarbeiten. Leider kommt bei diesem Export öfters die Reihenfolge durcheinander. Die XML ist immer valide, aber die Elemente sind falsch verschachtelt. Ich habe keine Möglichkeit den Export zu ändern/korrigieren

Zum Beispiel sollte es so sein:

<Element1>
<Element2>
<Element3>
...
</ Element3>
</ Element2>
</ Element1>

und ich bekomme so etwas:

<Element1>
<Element3>
<Element2>
...
</ Element2>
</ Element3>
</ Element1>

Das ist jetzt vereinfacht beschrieben. In Wirklichkeit kann es beliebig tief gehen und in vielen Elementen gleich bzw. unterschiedlich durcheinander sein.

Mir ist nur bekannt das Element3 nur ein Child-Element von Element2 sein darf und nicht andersrum.

Jetzt zerbreche ich mir den Kopf wie ich so etwas möglichst einfach korrigieren kann, aber leider finde ich keinen guten Weg. Vielleicht hat einer von euch eine Idee?

2.891 Beiträge seit 2004
vor 12 Jahren

Wie viele Daten hängen denn da noch so dran?
Wäre es eine Option, die Datei mittels XmlReader in eine bestimmte Struktur zu laden und dann wieder mittels XmlWriter anderes rauszuschreiben?

Mich macht allerdings etwas stutzig, dass du von einer Reihenfolge sprichst, was darauf schließen lassen würde, dass alle Elemente gleichberechtigt sind. Allerdings scheinen die Elemente in der XML ja geschachtelt, womit sich die Elemente in unterschiedlichen Hierachieebenen liegen. Diese müsstest du dann ja ändern...

A
764 Beiträge seit 2007
vor 12 Jahren

Das kommt mir sehr spanisch vor. Ich kann mir eigendlich nicht vorstellen, dass die Reihenfolge ohne guten Grund 'durcheinander kommt'.

Nichtsdestotrotz:

Mach eine Struktur, wie sie deiner Meinung nach sein soll und ordne die entsprechenden Elemente der importierten Xml da ein, wobei du die Elemente, die in deiner Struktur festgelegt sind auslässt und die Elemente und Attribute, die von dir nicht festgelegt sind jeweils mit überträgst. Alles klar? 8o

2.187 Beiträge seit 2005
vor 12 Jahren

Hallo el_vital,

Das hört sich nach dem Bilderbuch-Fall für XSLT (XML Transformation) an, wobei man in einem XML (<-Konfigurierbar) Soll- und Ist-Zustand beschreibt und der XSLT-Transformator (.Net hat einen mit dabei) das ganze Umbauen übernimmt.

Lass dir hier mal von Google, Wiki und Co. helfen.

Gruß
Juy Juka

[EDIT]
XSL Transformation
[/EDIT]

E
el_vital Themenstarter:in
346 Beiträge seit 2007
vor 12 Jahren

Vielen Dank erstmal für die Antworten und die Tipps.

Noch mal genaueres zu dem Problem. Wir haben zwei Programme die nicht mehr weiter entwickelt werden. Vor Jahren wurde zwischen den beiden Programmen eine XML Struktur vereinbart. Das Empfängerprogramm hat sich an die Vorgaben genau gehalten. Das Sendeprogramm leider nicht.

Die XML ist natürlich hierarchisch aufgebaut. Das Problem ist nur, dass das Sendeprogramm sich nicht genau an die Hierarchie hält.
Der Empfänger erwartet z.B. folgendes:


PC
   Gehäuse
       Festplatte
          Daten

Und von dem Sendeprogramm kann auch soetwas kommen:


PC
   Festplatte
      Gehäuse
          Daten

Wobei Festplatte und Gehäuse nur zwei Attribute haben "ID" und "Name". Mehr nicht. Die Elemente sind also im Grunde gleich. Aber halt vertauscht.

Es ist total seltsam und dem Programmierer nicht zu verzeihen.
Die Bezeichnungen der Elemente habe ich umbenannt. als Beispiel sollte es aber so reichen. In diesem Beispiel müssten jetzt die beiden Elemente Festplatte und Gehäuse einfach vertauscht werden. Das Gehäuse enthält jetzt auch die Unterelemente von der Festplatte.
Aber leider sind die nicht immer vertauscht. Man muss schon genau gucken ob es jetzt richtig oder vertauscht ist.