encoding in XML-File und MiniDOm

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.
polarsonnenschein2

encoding in XML-File und MiniDOm

Beitragvon polarsonnenschein2 » Mittwoch 16. November 2005, 10:55

Hallo,

ich will mittels minidom eine XML-Datei erzeugen, was auch bestens gelingt.
Allerdings sehe ich keinen Weg, wie man in die Kopfzeile des XML-Files
das Encoding einbinden kann.

Dieser Output wird benötigt:

Code: Alles auswählen

<?xml version="1.0" encoding="utf-8"?>



Geliefert wird aber nur :

Code: Alles auswählen

<?xml version="1.0"?>



Ist dieses mit minidom überhaupt möglich ? Wenn ja wie ?
(unter Beibehaltung der vorliegenden Codierung)


Code: Alles auswählen

# Anfang Codeblock

import xml.dom.minidom
S_FILE_NAME = "TEST"
S_FILE_TEST = S_FILE_NAME

TEST = xml.dom.minidom.Document()

# Node <test01>
test01 = TEST.createElementNS("","test01") ; TEST.appendChild(test01)


TEST_xml = file(S_FILE_TEST, "w")
TEST_xml.writelines(TEST.toprettyxml(" "))

TEST_xml.close()

# Ende Codeblock



Über evtl. alternative Methoden, wozu es auch eine "freundliche" Doku gibt wären natürlich auch nicht schlecht. Allerdings lizenzfrei.

Danke,

Volker

Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: encoding in XML-File und MiniDOm

Beitragvon gerold » Mittwoch 16. November 2005, 12:19

polarsonnenschein2 hat geschrieben: Dieser Output wird benötigt:
<?xml version="1.0" encoding="utf-8"?>

Hi Volker!

Das dürfte dir helfen:

Code: Alles auswählen

toprettyxml(indent='  ', encoding="utf-8")

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
polarsonnenschein
User
Beiträge: 18
Registriert: Mittwoch 16. November 2005, 10:29

wie einbinden ?

Beitragvon polarsonnenschein » Mittwoch 16. November 2005, 14:27

Hallo,

erst mal Danke für das Posting. Leider ist mir nicht klar wo ich den
"Codeschnipsel" einfügen muss um das gewünschte Ergebnis zu
erhalten ...

Nächstes Problem wird auch sein die auszugebenden Daten (Oracle)
in UTF-8 zu transformieren.

Wirklich frustrierend, daß es zu diesem Themenbereich keine
Docs und "Demos" gibt. Scheint ja wohl permanent diese Fragestellungen
zu geben.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: wie einbinden ?

Beitragvon Leonidas » Mittwoch 16. November 2005, 14:37

polarsonnenschein hat geschrieben:erst mal Danke für das Posting. Leider ist mir nicht klar wo ich den
"Codeschnipsel" einfügen muss um das gewünschte Ergebnis zu
erhalten ...

Also das ist wirklich nun nicht mehr schwer:

Code: Alles auswählen

import xml.dom.minidom
S_FILE_NAME = "TEST"
S_FILE_TEST = S_FILE_NAME

test = xml.dom.minidom.Document()

test01 = test.createElementNS("","test01") ; TEST.appendChild(test01)


test_xml = file(S_FILE_TEST, "w")
test_xml.writelines(TEST. toprettyxml(indent='  ', encoding="utf-8"))

test_xml.close()
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Re: wie einbinden ?

Beitragvon mitsuhiko » Mittwoch 16. November 2005, 15:06

polarsonnenschein hat geschrieben:Wirklich frustrierend, daß es zu diesem Themenbereich keine
Docs und "Demos" gibt. Scheint ja wohl permanent diese Fragestellungen
zu geben.


Oh Wunder :roll: Das ist ja auch nur eine 1:1 Implementation der DOM1.0 Spezifikation. Evtl mal beim w3c vorbeischauen: http://www.w3.org/TR/REC-DOM-Level-1/
TUFKAB – the user formerly known as blackbird
polarsonnenschein
User
Beiträge: 18
Registriert: Mittwoch 16. November 2005, 10:29

Doch nicht so einfach...

Beitragvon polarsonnenschein » Mittwoch 16. November 2005, 15:10

Hallo,

so einfach ist's dann doch nicht ... leider wird diese Fehlermeldung ausgespuckt...

Code: Alles auswählen

Traceback (most recent call last):
   File "test41.sbl", line 11, in ?
     test_xml.writelines(test. toprettyxml(indent='  ', encoding="utf-8"))
   File "/cc3.45/E027/cx/sbl/py/xml/dom/minidom.py", line 56, in toprettyxml
     writer = codecs.lookup(encoding)Ä3Ü(writer)
 LookupError: no codec search functions registered: can't find encoding
 Error in evalueating test41.sbl


Edit (Leonidas): Fehlermeldung in Code-Tags gesetzt.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Re: Doch nicht so einfach...

Beitragvon mitsuhiko » Mittwoch 16. November 2005, 15:16

polarsonnenschein hat geschrieben:Hallo,

so einfach ist's dann doch nicht ... leider wird diese Fehlermeldung ausgespuckt...


Code: Alles auswählen

In [1]: from xml.dom import minidom

In [2]: doc = minidom.Document()

In [3]: data = doc.createElement('data')

In [4]: text = doc.createTextNode('this is some content')

In [5]: data.appendChild(text)
Out[5]: <DOM Text node "this is so...">

In [6]: doc.appendChild(data)
Out[6]: <DOM Element: data at -0x487bc7b4>

In [7]: doc.toprettyxml(indent='  ', encoding='utf-8')
Out[7]: '<?xml version="1.0" encoding="utf-8"?>\n<data>\n  this is some content\n</data>\n'


scheint zu funktionieren :-)

haben deine string mit denen du das dom obj fütterst auch utf-8 oder etwas, dass das codecs modul in utf-8 umwandeln kann?
TUFKAB – the user formerly known as blackbird
polarsonnenschein
User
Beiträge: 18
Registriert: Mittwoch 16. November 2005, 10:29

Daten

Beitragvon polarsonnenschein » Mittwoch 16. November 2005, 15:30

Hallo,

die Daten kommen direkt aus Oracle herausgepurzelt. Also ISO 8859-1.
Doch so weit bin ich ja noch nicht.

Ich kämpfe momentan noch mit dem Header, der sich nicht einfügen läßt.
Aufgezeigter Fehler tritt auf.

Zum Nachvollziehen wäre es sinnvoll den selben "Testfall" zu nutzen.

Thx.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Re: Daten

Beitragvon mitsuhiko » Mittwoch 16. November 2005, 15:46

polarsonnenschein hat geschrieben:die Daten kommen direkt aus Oracle herausgepurzelt. Also ISO 8859-1.
Doch so weit bin ich ja noch nicht.

Warum willst du dann utf-8 als encoding haben? wenn die daten iso8859-1 sind?

probier mal text.decode("iso-8859-1").encode("utf-8") für deine ausgabe, wenn du es utf-8 haben willst.
TUFKAB – the user formerly known as blackbird
polarsonnenschein
User
Beiträge: 18
Registriert: Mittwoch 16. November 2005, 10:29

Erst den Header

Beitragvon polarsonnenschein » Mittwoch 16. November 2005, 16:08

Hallo,

Schritt für Schritt. Wie war das im ersten Semester ? Divide and
Conquer ...

Zuerst soll der Header das encoding erst mal annehmen. Das funktioniert in der beschriebenen Weise nicht. Müssen noch Lib's eingebunden
werden ?

Danke
polarsonnenschein
User
Beiträge: 18
Registriert: Mittwoch 16. November 2005, 10:29

encoding ... nochmal ...

Beitragvon polarsonnenschein » Mittwoch 16. November 2005, 16:11

P.S. selbst wenn ich das Encoding auf ISO-8859-1 stelle erhalte ich den Fehler. Notfalls könnte ich die XML-Datei mit korrekem Encoding
durch einen Konverter jagen (Mercator or what ever)

Fehler:
LookupError: no codec search functions registered: can't find encoding
Error in evalueating test41.sbl
polarsonnenschein
User
Beiträge: 18
Registriert: Mittwoch 16. November 2005, 10:29

Betriebssystem

Beitragvon polarsonnenschein » Mittwoch 16. November 2005, 16:14

Bevor ichs vergesse. Ich arbeite unter LINUX. SLES
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Mittwoch 16. November 2005, 16:47

er hat irgendwo ein problem mit dem Konvertieren der Daten zu utf-8.
Evtl postet du mal den Code, den exakten Namen des Datenbank encodings und dann tappen wir nicht mehr im Dunkeln :)
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Doch nicht so einfach...

Beitragvon gerold » Mittwoch 16. November 2005, 17:03

polarsonnenschein hat geschrieben:

Code: Alles auswählen

Traceback (most recent call last):
   File "test41.sbl", line 11, in ?
     test_xml.writelines(test. toprettyxml(indent='  ', encoding="utf-8"))
   File "/cc3.45/E027/cx/sbl/py/xml/dom/minidom.py", line 56, in toprettyxml
     writer = codecs.lookup(encoding)Ä3Ü(writer)
 LookupError: no codec search functions registered: can't find encoding
 Error in evalueating test41.sbl

Hi!

Nach dieser irreführenden Fehlermeldung zu schließen, ist ein Leerzeichen zwischen "test." und "toprettyxml" zu viel.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
polarsonnenschein
User
Beiträge: 18
Registriert: Mittwoch 16. November 2005, 10:29

Erst mal das encoding...

Beitragvon polarsonnenschein » Mittwoch 16. November 2005, 17:17

Nach Recherche auf diversen Pages bin ich dahinter gekommen, warum
die Fehlermeldung auftritt.

Im Source-Verzeichnis von Python fehlte das Unterverzeichnis
encodings.

Nach Analyse der Source codecs.py bin ich auf "import encodings"
gestoßen und hab mein abgespecktes python daraufhin geprüft.

Nun erscheint auch das encoding.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder