Hallo,
ich habe eine große xml-Datei. In dieser sind für einige Attribute nur die Namen vorhanden. Die dazugehörigen Werte liegen in einer Tabelle vor. Zwischen der xml-Datei und der Tabelle gibt es einen gemeinsamen Schlüssel, hier HGA01. Ich möchte die Werte aus der Tabelle in die xml-Datei übernehmen.
So richtig habe ich keine Idee wie die Aufgabe gelöst werden kann. Habt ihr einen Vorschlag?
Die xml-Datei siegt etwa so aus:
<Data ....>
...
<G>
<G01>0001</G01>
<G02>Daten</G02>
<G03>Daten</G03>
<G04/>
<G05/>
<G06/>
....
<G27>Daten</G27>
<HIA>
<I01/>
<I02>Daten<HIA02>
<I03>Daten<HIA03>
<I04>Daten<HIA04>
<I05/>
<Z>
...
</Z>
...
<Z>
...
</Z>
</I>
</G>
</Data>
Die Tabelle mit den fehlenden Daten hat diese Form:
G01 G04 G05 I05 I06
0001 Daten Daten Daten Daten
...
Bisher habe ich als einzige Lösungsmöglichkeit gefunden, die Tabelle mit den Daten in eine xml-Datei zu konvertieren und mit xsl die beiden xml-Dateien zusammen zufassen. Auf Grund der komplexen Struktur der zu ergänzenden xml-Datei nicht ganz einfach, ohne geeignete Werkzeuge.
Schon einmal im voraus, Danke für eure Hinweise.
Jens
Hi,
On 12/01/2022 10:03, Jens Böhme wrote:
ich habe eine große xml-Datei. In dieser sind für einige Attribute nur die Namen vorhanden. Die dazugehörigen Werte liegen in einer Tabelle vor. Zwischen der xml-Datei und der Tabelle gibt es einen gemeinsamen Schlüssel, hier HGA01. Ich möchte die Werte aus der Tabelle in die xml-Datei übernehmen.
So richtig habe ich keine Idee wie die Aufgabe gelöst werden kann. Habt ihr einen Vorschlag?
[...]
Bisher habe ich als einzige Lösungsmöglichkeit gefunden, die Tabelle mit den Daten in eine xml-Datei zu konvertieren und mit xsl die beiden xml-Dateien zusammen zufassen. Auf Grund der komplexen Struktur der zu ergänzenden xml-Datei nicht ganz einfach, ohne geeignete Werkzeuge.
Das sieht recht komplex und dynamisch aus. Aus der Erfahrung mit sowas würde ich sagen dass Du Dir ein Script oder Progrämmchen schreiben musst...
XSLT kann recht gut Daten extrahieren. Um Daten einzufügen ist es sub-optimal. Einfache Shell-Tools scheitern meistens am XML. Es sei denn Du musst nur für jede Zeile die Datenfelder an einer immer gleichen Stelle einfügen (ohne umständlich nach einem Key suchen zu müssen) und dann wird es abgelegt oder weggeschickt... Dann kannst Du Dir mit sed oder awk etwas basteln. Wenn sich das Input-XML jedesmal ändert oder die Daten je nach Key in unterschiedliche Elemente gepackt werden müssen, dann wird es komplexer.
Also such' Dir eine (Script-) Sprache aus und dann können wir Dir sagen wie es dort geht. Unter anderem stehen zur Auswahl: Perl, Python, Ruby, TCL, C++...
Das Prinzip ist immer das selbe:
Tabelle einlesen.
XML in einen DOM-Baum prügeln.
Durch den Baum gehen und dabei Daten aus der Tabelle ergänzen.
Baum wieder serialisieren.
Konrad
Am Mittwoch, dem 12.01.2022 um 10:03 +0100 schrieb Jens Böhme:
ich habe eine große xml-Datei. In dieser sind für einige Attribute nur die Namen vorhanden. Die dazugehörigen Werte liegen in einer Tabelle vor. Zwischen der xml-Datei und der Tabelle gibt es einen gemeinsamen Schlüssel, hier HGA01. Ich möchte die Werte aus der Tabelle in die xml-Datei übernehmen.
Du kannst mit xmlstarlet oder xmllint --xpath über die Elemente in der XML- Datei iterieren. Mit awk suchst du dann in der Text-Datei die zugehörigen Werte zu dem verarbeietten Element heraus und fügst sie z.B. mit xmlstarlet wieder in die XML-Datei ein, oder du erstellst aus den Daten eine neue XML-Datei. Das ganze schreibst du als Shell-Skript.
Ich habe auch früher mit XSLT Text-Dateien verarbeitet, aber das war eher kompliziert.
HTH und Gruß, Daniel
lug-dd@mailman.schlittermann.de