XML-Datei Bearbeiten Elementknoten austauschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lacki94
User
Beiträge: 6
Registriert: Mittwoch 19. Dezember 2018, 14:01

Hallo,
ich habe aktuell ein Problem mit einem Script welches den Elementknoten einer XML-Datei austauscht.

Ich habe zwei unterschiedliche XML-Dateien. Aus der Datei 1 soll der Inhalt des Elementknoten gelöscht und mit dem Inhalt eines bestimmten Elementknoten der Datei 2 ersetzt werden.
Datei 1

Code: Alles auswählen

...
<gmd:identificationInfo>
        <gmd:MD_DataIdentification id="DEINE ID1">
            <gmd:citation>
                <gmd:CI_Citation>
                                        <gmd:title>
                        <gco:CharacterString>DEIN TITLE1</gco:CharacterString>
                    </gmd:title>
                    ...                   
                    
Datei 2

Code: Alles auswählen

...
<gmd:id>DEINE ID2</gmd:id>
<gmd:Name>DEIN TITLE2</gmd:Name>
...
Ergebnis

Code: Alles auswählen

...
<gmd:identificationInfo>
        <gmd:MD_DataIdentification id="DEINE ID2">
            <gmd:citation>
                <gmd:CI_Citation>
                                        <gmd:title>
                        <gco:CharacterString>DEIN TITLE2</gco:CharacterString>
                    </gmd:title>
                    ...
                    

Gibt es dafür in Python eine Möglichkeit dies umzusetzen?
Ich bin euch für jede Hilfe dankbar.

Mit freundlichen Grüßen
Lacki94
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mir ist nicht klar, was da wie ersetzt wird. Woher kommt denn die Zuordnung von DEINE ID1 zu DEINE ID2?
Lacki94
User
Beiträge: 6
Registriert: Mittwoch 19. Dezember 2018, 14:01

Wie meinst du das?
Also das sind 2 unterschiedliche XML-Dateien (Daten1.xml und Daten2.xml), diese sind aber von unterschiedlichen Formatierungen.
Es geht in erster Linie um "DEIN TITLE" zu ersetzen.

Das ganze würde ich gerne mit einem Python-Script machen, da es sich hierbei um ziemlich viele Dateien handelt.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das das zwei Dateien sind, das ist mir klar. Was mir nicht klar ist, wie das Kriterium aussieht, mit dem du einen Eintrag in einer Datei einem Eintrag in der anderen zuordnest. Die IDs sind ja unterschiedlich. Und du machst ..., und deutest damit an, dass es mehrere Eintraege gibt. Sind das pro Eintrag in Daten1.xml ein Eintrag in Daten2.xml? Und stimmt die Reihenfolge? Ist der erste Eintrag aus Daten1 mit dem ersten aus Daten2 zu ersetzen? Oder was wird da wie ersetzt?
Lacki94
User
Beiträge: 6
Registriert: Mittwoch 19. Dezember 2018, 14:01

Also in der Datei 1 ist ein Objekt vorhanden.
In Datei 2 sind x-Objekte enthalten und aus jedem der Objekte soll eine neue Datei 1 mit den Werte/ Texte aus Datei 2 entstehen.

Ist sowas möglich?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du schreibst doch, das in 1 aus 2 etwas *ERSETZT* Werden soll. Jetzt ploetzlich sollen x Objekte entstehen. So zumindest verstehe ich dich. Das widerspricht sich.

Ob das also moeglich ist, kann ich nicht sagen - denn ich habe bisher immer noch nicht begriffen, was du erreichen willst. Und solange du nicht in klarer Sprache beschreiben kannst, was zu tun ist, kann man das erst Recht nicht einem noch deutlich duemmeren Computer begreiflich machen.

Wie waere es, wenn du mal konkret 3 Dateien anfertigst, die

- vollstaendiges XML sind, mit root tag und allem huep und hupp.
- Datei1, Datei2, und die ersultierende Datei3.

Dann kann man das beurteilen.
Lacki94
User
Beiträge: 6
Registriert: Mittwoch 19. Dezember 2018, 14:01

Bezüglich den Objekten hab ich mich vielleicht widersprüchlich und missverständlich ausgedrückt.
Ich werde die Dateien anfertigen.
mein Problem ist es, dass die Datei 1 knapp 1000 Zeilen beinhaltet, wobei aber nur einzelne Zeilen/ Elemente ersetzt werden sollen und ich kann ja wohl schlecht hier die 1000 Zeilen rein kopieren, deshalb hab ich das gerade so versucht zu erklären.
Wenn ich die Dateien dann erstellt habe werde ich mich nochmal melden
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Oder willst du eigentlich, das x Objekte in Datei2 zu x Dateien werden, und die sollen dann halt so aussehen, wie im Beispiel von Datei1?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nachtrag: du kannst zB ein pastebin benutzen, wenn die Datei zu gross ist.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lacki94: und wenn Du schon dabei bist, kannst Du auch Deinen bisherigen Code posten und genau beschreiben, wo Du da nicht weiterkommst, ob es eine Fehlermeldung gibt, oder sonst wie etwas sich anders verhält als gedacht?
Lacki94
User
Beiträge: 6
Registriert: Mittwoch 19. Dezember 2018, 14:01

__deets__ hat geschrieben: Mittwoch 19. Dezember 2018, 16:56 Oder willst du eigentlich, das x Objekte in Datei2 zu x Dateien werden, und die sollen dann halt so aussehen, wie im Beispiel von Datei1?
Ja genau das meine ich
Ich habe mich da irrtümlich ausgedrückt.
Sirius3 hat geschrieben: Mittwoch 19. Dezember 2018, 18:43 @Lacki94: und wenn Du schon dabei bist, kannst Du auch Deinen bisherigen Code posten und genau beschreiben, wo Du da nicht weiterkommst, ob es eine Fehlermeldung gibt, oder sonst wie etwas sich anders verhält als gedacht?
Ich möchte mal wissen ob dies möglich ist, ich habe bisher noch nichts geschrieben und werde mit diesem im neuen Jahr beginnen, da heute mein letzter Arbeitstag ist für dieses Jahr.
Ich selbst habe zwar in meinem Studium bisschen Informatik gehabt aber nicht extrem tiefgründig, deshalb frag ich euch hier um Rat und Hoffe ihr könnt mir helfen.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lacki94: die Formulierung "Probleme mit einem Skript" hat mich vermuten lassen, dass das Skript schon existiert.
Ja es ist möglich. Wenn die Datei1 fix ist, sogar sehr einfach. Wenn ich das richtig sehe, sollen ja gar keine Elementknoten gelöscht werden, sondern nur an zwei Stellen der Inhalt eines Attributs und eines Textes durch Informationen aus einer anderen Quelle gefüllt werden sollen. (es spielt gar keine Rolle, dass die andere Quelle auch eine XML, denn die wird nur in eine passende Datenstruktur (hier Liste) geparst).
Lacki94
User
Beiträge: 6
Registriert: Mittwoch 19. Dezember 2018, 14:01

Sirius3 hat geschrieben: Donnerstag 20. Dezember 2018, 09:06 @Lacki94: die Formulierung "Probleme mit einem Skript" hat mich vermuten lassen, dass das Skript schon existiert.
Ja es ist möglich. Wenn die Datei1 fix ist, sogar sehr einfach. Wenn ich das richtig sehe, sollen ja gar keine Elementknoten gelöscht werden, sondern nur an zwei Stellen der Inhalt eines Attributs und eines Textes durch Informationen aus einer anderen Quelle gefüllt werden sollen. (es spielt gar keine Rolle, dass die andere Quelle auch eine XML, denn die wird nur in eine passende Datenstruktur (hier Liste) geparst).
Ich verstehe was du Meinst.
Ich wollte mein ersten Beitrag mit den Elementknoten abändern aber dies geht nicht mehr.
Der Titel sollte eig. Attribute innerhalb von Elementknoten austauschen heißen.
Ich hab in dieser Art schon ein Problem, da mir so der Anfang fehlt, mit welcher Funktion ich dies am besten und einfachsten löse und habe dazu auch nicht wirklich was brauchbares gefunden gehabt.
Die Datei 1 ist fix und soll mit der Attribute/ Texte aus Datei abgeändert werden. Je nach Art der Datei 2 sind dies bis zu 1000 Objekte die jeweils in eine eigene Datei zu schreiben sind, sodass dann 1000 Dateien daraus entstehen. Es sind je Objekt 4 Attribute abzuändern.
Bei den Datensätzen handelt es sich um Metadaten die eingerichtet werden sollen.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lacki94: Standard für XML in Python ist die ElementTree-API. Entweder direkt aus der Standardbibliothek, oder über das externe `lxml.etree`, das zum Beispiel XPath komplett unterstützt, statt nur der Untermenge die `xml.etree.ElementTree` kennt.

Und dann das übliche: (zu) grosse Probleme in kleinere Teilprobleme zerlegen, solange bis man bei Teilproblemen angelangt ist, die sich in ein paar Zeilen Code lösen lassen. Eine übliche Trennlinie zum zerlegen hat Sirius3 ja schon genannt: Eingabe und Ausgabe. Der Programmteil der die 1000 XML-Dateien schreibt, braucht nicht zu wissen woher die Daten kommen die eingesetzt werden, und der Programmteil der die Daten aus der zweiten XML-Dateien ausliest, braucht nicht zu wissen was danach mit diesen Daten passiert.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten