xml Kommentar lesen und schreiben

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
HarryPython
User
Beiträge: 60
Registriert: Freitag 8. Juni 2007, 07:39

Hi.

Ich möchte gern unter der Codierungszeile meines xml's eine Kommentarzeile einfügen und diese dann auch wieder auslesen können. Hab zu dem Thema leider nichts gefunden.



Gruß HP
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

ein kommentar ist eigentlich nur für den entwickler da und wird vom programm nicht benötigt.
wieso willst du dies denn umbedingt in einen Kommentar packen?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

HarryPython hat geschrieben:Ich möchte gern unter der Codierungszeile meines xml's eine Kommentarzeile einfügen und diese dann auch wieder auslesen können. Hab zu dem Thema leider nichts gefunden.
Hallo HP!

Am Besten, du liest den Kommentar mit den konventionellen Mitteln aus. Das heißt mit *open* oder *file*.

Und vor dem Schreiben des XML-Strings in eine Datei, fügst du am Anfang deinen Kommentar hinzu. Auch wieder mit den normalen Dateizugriffsmitteln von Python.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
HarryPython
User
Beiträge: 60
Registriert: Freitag 8. Juni 2007, 07:39

Hi

Und ich dachte ich wäre der Entwickler. :lol:

Ich bekomme ein xml welches eine Kommentarzeile enthält. Dadurch kann ich das xml File genau identifizieren und verhinderen, dass ein falsches geladen wird. Und genau so wollte ich auch mein eigenes erkennen.

Am Besten, du liest den Kommentar mit den konventionellen Mitteln aus. Das heißt mit *open* oder *file*.
Hmm. Genau das wollte ich mit meiner Frage umgehen. Hatte gedacht es gibt dafür in der einer xml Bibliothek ein Befehl, den ich nur nicht finde. Wäre interessant zu wissen, ob das xml den Kommentar auch als Kommentar erkennt. Ich probiere es mal aus.
BlackJack

Grundsätzlich dürfen XML-Bibliotheken Kommentare einfach komplett ignorieren, das heisst die müssen nicht an den Benutzer der Bibliothek weitergeleitet werden.

Ich glaube bei `lxml` "überleben" Kommentare das parsen. Müsstest Du mal ausprobieren.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mit lxml geht das:

Code: Alles auswählen

>>> from lxml import etree
>>> x = etree.fromstring("<foo><!-- test --></foo>")
>>> x.getchildren()
[<!-- test -->]
Allerdings logischerweise nur, wenn Kommentare in einem Knoten sind.
TUFKAB – the user formerly known as blackbird
HarryPython
User
Beiträge: 60
Registriert: Freitag 8. Juni 2007, 07:39

Hi.

Danke für eure Antworten.

Bei lxml bekomme ich encoding Fehler zurück. Hab das damit auch schnell wieder aufgegeben, da ich ja nicht in einen Knoten schreiben wollte.

Hab das wie Gerold schon gesagt hat mit "open" usw. gelöst.
Hier meine Lösung:

Code: Alles auswählen

#Abspeichern der geladenen mxl Datei                             
tree = ET.ElementTree(root)
tree.write("dateiname", "UTF-8")

#Öffnet die Datei und liest eine Liste aus
f = file("dateiname", "r")
text = f.readlines()
f.close()
       
#Fügt ein Kommentar in die Liste ein und schreibt das xml File
t = file("dateiname", "w") 
text.insert(1,"<!--  Mein Kommentar -->\n")
t.writelines(text)
t.close() 
Das mit der Datei öffnen, schließen und dann wieder öffnen um zu schreiben, sieht ein wenig aus wie gewollt aber nicht gekonnt. Gibts da was schöneres?

Danke

Gruß HP
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Gibts da was schöneres?
Die XML-spezifikation rät afaik davon ab, kommentare zu irgendetwas anderem, außer zum kommentieren zu missbrauchen, insbesondere für nicht für Anweisungen an den Parser.
Dazu solle man "processing instructions" verwenden.
Die sehen so aus: <?target krams ?> und werden afaik von den XML-Parsern am leben gelassen.
http://www.linkwerk.com/pub/xmlidp/2000/pi.html
Antworten