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.
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mittwoch 16. November 2005, 17:58

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

Code: Alles auswählen

In [1]: "spam" .decode("utf-8")
Out[1]: u'spam'

In [2]: "eggs".decode("utf-8")
Out[2]: u'eggs'
8)
TUFKAB – the user formerly known as blackbird
BlackJack

Donnerstag 17. November 2005, 01:59

gerold hat geschrieben:
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
Nach dieser irreführenden Fehlermeldung zu schließen, ist ein Leerzeichen zwischen "test." und "toprettyxml" zu viel.
Das dürfte kaum den Fehler provozieren. Der Punkt-Operator ist genau das: ein Operator. Wie '+' oder '-' oder '*' auch, es ist egal wieviele Leerzeichen oder sogar Zeilenumbrüche davor und dahinter stehen.

Code: Alles auswählen

In [1]: a = 'hallo'

In [2]: a.upper()
Out[2]: 'HALLO'

In [3]: (a
   .3.:            .
   .3.:  upper
   .3.:  (
   .3.:           )
   .3.: )
Out[3]: 'HALLO'
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 17. November 2005, 09:44

blackbird hat geschrieben:

Code: Alles auswählen

In [1]: "spam" .decode("utf-8")
Out[1]: u'spam'

In [2]: "eggs".decode("utf-8")
Out[2]: u'eggs'
Ups, das wusste ich noch nicht. :oops: :oops: --> denke doch noch zu sehr in "Visual Basic".

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 17. November 2005, 15:49

Aber da sollte man, obwohl es möglich ist, keine Leerzeichen reinmachen. Ich habe zum Glück auch noch keinen Quelltext gesehen, der sowas machen würde.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Donnerstag 17. November 2005, 22:30

Ich habe das schon gesehen und auch schon gemacht. Es ist eine relativ "natürliche" Bruchstelle wenn man Methodenaufrufe auf Ergebnisse von vorhergehenden Aufrufen aneinanderkettet und das auf mehrere Zeilen verteilen möchte.

Code: Alles auswählen

(spam.frobnicate()
    .fooble()
    .stringify()
    .flobs())
Wenn jetzt jeder Aufruf noch zwei bis fünf Argumente mit auf den Weg bekommt, dann macht das schon Sinn.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 18. November 2005, 08:45

Also ich würde in dem Falle ehr mit "Zwischenergebnissen" arbeiten. Dann weiß man auch besser was passiert ;)
Aber finde ich irgendwie abgefahren, das man Leerzeichen einfach einfügen kann... Klingt aber auch Logisch, wenn "." == ["+", "-", ect.] is ;)

Zurück zum Thema...
Ich weiß das man normalerweise und direker XML mit minidom o.ä. erzeugen kann...
Eine andere herrangehensweise wäre ein Template zu bauen und es mit leben zu füllen... z.B. simpleTAL... Ist vielleicht etwas abgefahren, aber man kann somit alle Arten von XML bauen, wie man es will ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 18. November 2005, 13:23

BlackJack hat geschrieben:Ich habe das schon gesehen und auch schon gemacht. Es ist eine relativ "natürliche" Bruchstelle wenn man Methodenaufrufe auf Ergebnisse von vorhergehenden Aufrufen aneinanderkettet und das auf mehrere Zeilen verteilen möchte.
Auf mehrere Zeilen verteilt sieht dass schon sinniger aus, jedoch ist es nicht wirklich hübsch :-/

XML kann man auch mit Kid erzeugen. Der Vorteil gegenüber simpleTAL ist, dass es besonders stark in Entwicklung ist, da es für TurboGears benötigt wird.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 18. November 2005, 13:35

Na, ich weiß nicht ob das wirklich ein großer Vorteil ist ;) Das heißt soviel, das die API/Schnittstellen/Funktionalität noch nicht wirklich feststehen bzw. noch nicht ausgiebig getestet sind???

Ich will nicht behaupten simpleTAL ist das beste überhaupt... Dafür hab ich bisher noch nicht so viel damit gearbeitet. Aber es ist nun mal eine Standalone Lösung von Zope's TAL, welches schon einigermaßen "alt" ist und somit eigentlich ausgereift sein dürfte...

Andererseite haben sich die KID Entwickler auch erstmal angesehen was es so gibt und vielleicht auch TAL...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 18. November 2005, 14:14

jens hat geschrieben:Na, ich weiß nicht ob das wirklich ein großer Vorteil ist ;) Das heißt soviel, das die API/Schnittstellen/Funktionalität noch nicht wirklich feststehen bzw. noch nicht ausgiebig getestet sind???
Nach der Anzahl von Leuten zu schließen, die Kid in TurboGears nutzen sollten Fehler recht schnell gefunden werden. Die API kann sich durchaus noch leicht ändern, jedoch habe ich in der TG Mailingliste gelesen (den genaue Mail kann ich nicht mehr liefern, dort sind zu viele), dass die API bis Kid 1.0 sich nicht mehr sonderlich ändern wird.
Kid homepage hat geschrieben:It was spawned as a result of a kinky love triangle between XSLT, TAL, and PHP.
Na, PHP muss man nicht mögen, aber man muss den PHP-mäßigen Teil von Kid ja auch nicht nutzen (das ist nur die Möglichkeit Python-Code in den Templates zu schreiben).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 18. November 2005, 14:18

Leonidas hat geschrieben:(das ist nur die Möglichkeit Python-Code in den Templates zu schreiben)
Wobei das auch mit simpleTAL möglich ist... Das kann auch ganz nützlich sein, weil man einfache Filter damit stricken kann. s. http://www.python-forum.de/viewtopic.php?p=25207#25207

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 18. November 2005, 14:27

Im Wiki gibt es die Seiten WhatsBorrowed und WhatsDifferent. Dort steht was Kid alles auch aus TAL/ZPT übernommen hat.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 18. November 2005, 14:38

Leonidas hat geschrieben: XML kann man auch mit Kid erzeugen. Der Vorteil gegenüber simpleTAL ist, dass es besonders stark in Entwicklung ist, da es für TurboGears benötigt wird.
Hi!

Also für mich sieht Kid wie TAL ohne Trennung von Code und Content aus. Ob das jetzt wirklich so fortschrittlich ist, möchte ich sehr bezweifeln.
Das geht sogar so weit, dass solche Zeilen möglich sind:

Code: Alles auswählen

<p>
  The current time is ${time.strftime('%C %c')}.
</p>
Jetzt fällt mir auch wieder ein, weshalb ich unter ZOPE kein DTML mehr, sondern nur noch TAL verwende. Solche Mischungen von Content und Code gehen gerne in die Hose oder erschweren die Wiederverwendung von Code. :evil:

:idea: Gerade weil solche Konstrukte *nicht* mit TAL möglich sind, finde ich TAL ausgereifter.

Dann kommt noch das Problem der Übersetzung dazu. Unter Zope kann ich das Tag-Attribut i18n setzten. Schon brauchst du dich um fast nichts mehr kümmern. Der Content wird durch die im Browser eingestellte Sprachversion ersetzt oder kann gezielt ausgetauscht werden. Ich glaube aber nicht, dass das mit *simpleTal* funktioniert. :?

Wie auch immer -- ich glaube, das hat mit der ursprünglichen Frage des OP nichts mehr zu tun. :wink:

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Freitag 18. November 2005, 21:46

Was genau beanstandest Du denn an der zitierten Codezeile? Wie sollte das denn getrennter aussehen? Irgendwo *muss* man letztendlich eine Schnittstelle zu Funktionen/Methoden anbieten.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 19. November 2005, 13:00

BlackJack hat geschrieben:Was genau beanstandest Du denn an der zitierten Codezeile? Wie sollte das denn getrennter aussehen? Irgendwo *muss* man letztendlich eine Schnittstelle zu Funktionen/Methoden anbieten.
Hi @ all!

Ich gehe mit meiner Meinung zu diesem Thema ziemlich mit den Entwicklern von TAL konform. Bei TAL gibt es nur eine Stelle, an der Code sein darf --> als Attribut eines TAGs. So gibt es für den, der die Seite später einmal umgestalten muss, nicht so viel zu bedenken.

Er muss natürlich ein paar Dinge über Tal wissen. Zum Beispiel:

- Wenn im TAG "tal:replace" steht, dann wird der komplette TAG ersetzt. Es bringt also nichts, wenn er eine Änderung als TAG-Content hinein schreibt.

- Wenn im TAG "tal:content" steht, dann wird der Inhalt des TAGs ersetzt. Die TAG-Definition selbst, bleibt erhalten.

Der, der die Seite später mal editiert, muss also nur ein paar Grundregeln beachten um die Seite nicht zu zerstören.

Es kann komplizierter werden, wenn auch noch innerhalb eines TAGs Code stehen kann. Ich kann diese Aussage nicht beweisen, da es sich dabei um eine Bauchsache handelt.
Man kann sich ja mal den Quellcode von vielen ASP- oder PHP-Seiten ansehen, die so im Internet herumschwirren, oder die man selber programmiert hat. Viele sind kaum mehr wartbar, da es kaum oder keine Trennung zwischen Code und Content gibt.

Man kann es auch so sehen: Je schwieriger es dem Programmierer gemacht wird, unschönen Code zu schreiben, desto einfacher ist es für andere, den Code zu lesen. --> Python.

Es gab eine Zeit, das ist noch gar nicht so lange her, da erstellte ich dynamische Internetseiten in Zope mit DTML. DTML ist sehr mächtig und man kann damit auch innerhalb eines Textes Variablen einfügen.

Aber genau diese Möglichkeit, macht dir auf einmal Schwierigkeiten, wenn du innerhalb eines TAGs ein Attribut verändern, hinzufügen oder löschen möchtest. Auch ein WYSIWYG-Editor hat keine Chance mehr, da der Code das TAG so verändert, dass es nicht mehr HTML-konform ist.

Genau über solche Dinge und noch viel mehr, haben sich die Entwickler von TAL, METAL und Co. Gedanken gemacht. Das Ergebnis ist nicht nur eine Vorlagensprache, sondern eine komplette Strategie zur Website-Erstellung.

Wenn ich schon innerhalb eines TAGs einen Teil ersetzen muss, dann sollte dieser Teil auch ungerendert wie gültiges HTML aussehen. Ungeachtet der Möglichkeit, den Text übersetzten zu lassen, könnte der Code in TAL so aussehen:

Code: Alles auswählen

<p>
  The current time is 
  <span tal:content="python: time.strftime('%C %c')">[Time]</span>.
</p>
Ich habe diesen Code, nur mal zum Testen, in den Quellcodebereich des Programmes NVU eingegeben. Danach in die WYSIWYG-Ansicht gewechselt, "[Time]" markiert und auf den Button für "Fett" geklickt. Das Ergebnis aus dem Quellcodebereich sieht so aus:

Code: Alles auswählen

<p>The current time is <span style="font-weight: bold;"
 tal:content="python: time.strftime('%C %c')">[Time]</span>.
</p>
Auch wenn ich jetzt in der Normalansicht von NVU den Text "[Time]" in "[Zeit]" geändert hätte -- der Code würde weiterhin funktionieren.

Einzig das Löschen des kompletten Textes "[Time]" hätte dazu geführt, dass der Code gelöscht worden wäre.

Als ich mich das erste Mal mit Zope beschäftigte, schrie ich sofort nach einem Ersatz für ASP, also der Möglichkeit Code direkt in die HTML-Seite einzugeben. Das ist heute nicht mehr der Fall. Heute bin ich froh, dass ich so viel von der Logik in Python-Skripte ausgelagert habe. Diese kann ich jetzt, ohne Mehraufwand, direkt in anderen Vorlagen wiederverwenden und über XML-RPC oder HTTP aufrufen.

Man stelle sich nur die Möglichkeiten vor, die einem genommen werden, nur weil man Code nicht vom Content trennen wollte.....

Stell dir vor, du erstellst eine HTML-Seite, die dir den Status deiner Server anzeigt. Steckt die Logik nicht in der HTML-Seite, sondern in einem Python-Skript, das von der HTML-Seite aufgerufen wird, dann ist es schon fast ein Kinderspiel, diese Daten von einem Programm auf einem Client-PC per XML-RPC abzurufen und in einem GUI anzuzeigen.

Würde die Logik in der HTML-Seite stecken, dann müsste man entweder die gerenderte HTML-Seite parsen oder dafür nochmal ein eigenes Skript schreiben.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Samstag 19. November 2005, 13:13

Weil ich gerade dabei bin, Zope so hoch zu loben. --> Man braucht wahrscheinlich keine fünf Minuten, um Zope unter Windows zu installieren.

Nachdem man das Tutorial ausprobiert hat, hat man schon eine Vorstellung davon, was TAL und METAL sind und wie man damit in kürzerster Zeit komplette Websites erstellen kann.

Das soll die allgemeine Meinung -- Zope ist doch viel zu groß und kann viel mehr als ich für mein Vorhaben brauche. -- ein wenig widerlegen. Man kann damit auch kleine Sites erstellen.

Wenn ich für mein Vorhaben keine Benutzerauthentifizierung brauche, dann muss ich diese ja nicht verwenden. Es ist aber schön, zu wissen, dass es so etwas gibt wenn ich es brauche.

Zum Installieren von Office braucht man länger. Das kann auch viel mehr als die meisten je brauche werden. Trotzdem verwenden viele Word um damit einen Brief zu schreiben.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten