Seite 1 von 1

XML Datei bearbeiten

Verfasst: Mittwoch 5. August 2009, 12:10
von remax
Einen wunderschönen Tag wünsche ich allen,

ich bin ein Python Neuling und möchte gern ein Skript schreiben. Und hoffe ihr könnt mir bei meine Vorhaben helfen.

Folgendes sollte das Skript erledigen:

-XML Datei einlesen
-Einen TAG suchen: z.B. <test><anderer tag></anderer tag></test>
-Den gefundenen TAG löschen und alles was innerhalb des TAGs war + einrutschen der Zeilen(Zeilenumbrüche mit löschen)
-Datei speichern mit einen anderen Namen

Es klingt ganz einfach, leider fehlt mir noch die Erfahrung mit Python.
Kann vielleicht einer mir ein Beispiel nennen, wie dies umzusetzen ist?

Grüße remax

Verfasst: Mittwoch 5. August 2009, 12:13
von jbs

Verfasst: Mittwoch 5. August 2009, 12:21
von sma
lxml ist eine gute Bibliothek für die XML-Verarbeitung, die man aber leider nachinstallieren muss. Unter Linux ist das kein Problem, auf dem Mac empfiehlt es sich Python und lxml über Macports zu installieren, denn sonst gibt es Probleme und unter Windows weiß ich's nicht.

lxml hat eine cssselect-Methode, die so funktioniert wie JQuery und einfache Manipulation von XML-DOMs erlaubt.

Den SAX-Weg würde ich nur gehen, wenn die Datei so groß ist, dass sie nicht in den Arbeitsspeicher passt oder es auf jede Millisekunde bei der Verarbeitung ankommt. In allen anderen Fällen würde ich Speicher und Laufzeit gegen eine viel einfachere Programmierung eintauschen.

Stefan

Verfasst: Mittwoch 5. August 2009, 12:24
von remax
Ich habe leider nicht die Möglichkeit Pakete auf dem laufendem Server System zu installieren(SUSE 10), aber Python ist da drauf. Deswegen hatte ich vor mit Python dieses Skript zu schreiben. Mit welchem Befehl kann man den raus kriegen, welche Python Pakete bereits installiert sind?

Verfasst: Mittwoch 5. August 2009, 12:32
von sma
remax hat geschrieben:Mit welchem Befehl kann man den raus kriegen, welche Python Pakete bereits installiert sind?
Hm, http://www.google.com/search?q=suse+paketmanager , "rpm -q" oder so? Ich nix sprechen Suse. Wenn du nix installieren darfst, musst du eben mit http://www.google.com/search?q=python+documentation+xml auskommen... So ein DOM-Knoten hat die üblichen vom W3C definierten Methoden, die eigentlich in jeder Sprache irgendwie umständlich sind.

Stefan

Verfasst: Mittwoch 5. August 2009, 12:39
von cofi
Wenn dein Python 2.5+ ist, kannst du auch ElementTree nutzen.

Verfasst: Mittwoch 5. August 2009, 12:50
von jerch
Mit welchem Befehl kann man den raus kriegen, welche Python Pakete bereits installiert sind?

Code: Alles auswählen

rpm -qa                # listet alle Pakete
rpm -qa | grep python  #fast alle python Relevanten, da suse die meist nach python-paketname benennt

Verfasst: Mittwoch 5. August 2009, 13:09
von remax
Leider nur Python 2.4 installiert. Unter Help(xml) kann man sehen, dass es mit DOM uns SAX umgehen kann.

Hat einer für mich ein Beispiel, mit dem ich vielleicht anfangen könnte.
Bin leider ein absoluter Python Anfänger, habe aber einige Skills in anderen Skriptsprachen und Basic.

Verfasst: Mittwoch 5. August 2009, 13:20
von cofi
http://effbot.org/zone/element-index.htm
ElementTree ist pure Python, darum sollte es keine Probleme geben, wenn du das einfach in deinen PATH wirfst.
Bevor du dir SAX/DOM antust, willst du das ausprobieren, denn die beiden machen wirklich keinen Spass.

Verfasst: Mittwoch 5. August 2009, 14:17
von lunar
sma hat geschrieben:Den SAX-Weg würde ich nur gehen, wenn die Datei so groß ist, dass sie nicht in den Arbeitsspeicher passt […]
lxml.etree hat eine ".iterparse()"-Methode, die meines Wissens nur Teile des Dokuments einliest, und daher auch mit großen Dokumenten zurecht kommt.