ElementTree und Sonderzeichen

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
mleopold
User
Beiträge: 15
Registriert: Dienstag 4. Juni 2013, 16:05

Hallo, ich habe versucht, einen Zeilenumbruch in einen Textknoten einzutragen, also node.text = "
". Das Ergebnis ist jedoch node.text == "
". Ein node.text = "\n" verbleibt wie es ist und wird auch nicht zu der gewünschten Form. Wie könnte ich ein node.text == "
" erzeugen? mleopold
BlackJack

@mleopold: Warum willst Du so etwas tun? Zwischen '\n' und '
' sollte kein Unterschied bestehen.

Edit: Also im serialisierten XML-Dokument. Auf der Ebene von der wie hier reden gibt es so etwas wie '
' als ein Zeichen gar nicht.
mleopold
User
Beiträge: 15
Registriert: Dienstag 4. Juni 2013, 16:05

Ich verarbeite Textdokumente. In einem Zwischenschritt sollen Sie Originalgetreu bleiben - sprich so wie sie in den eingescannten Dokumenten waren, um die Orientierung und Nachkorrektur zu erleichtern. Die originalen Zeilenumbrüche entfallen erst später, wenn das Dokument weiterverarbietet wird. Das Problem ist doch aber allgemein. Ich kann ja offenbar auch kein node.text = "" schreiben. Das kann doch nicht im Sinne des Erfinders sein. mleopold
BlackJack

@mleopold: Doch das ist im Sinne des Erfinders. Du bewegst Dich hier auf der falschen Ebene. Wenn Du Zeilenumbrüche haben möchtest, dann verwende Zeilenumbrüche und keine Darstellung von Zeilenumbrüchen wie sie in *serialisiertem* XML dargestellt werden könnten. Und wenn Du ein Steuerzeichen wie „DELETE” verwenden willst, dann kannst Du ``unichr(127)`` oder u'\x7f' verwenden. Wobei ich nicht weiss ob das in XML serialisiert werden kann oder den Parser überlebt.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@mleopold: laut XML-Spezifikation ist „&#10;“ identisch mit „\n“, der Parser muß sogar die Entitäten auflösen und bei Bedarf wieder serialisieren. Je nach Parser gibt es noch Kann-Bestimmungen zur Verarbeitung von Leerraum, die aber Elementtree alle ignoriert und Leerraum so verarbeitet, wie er in der Datei steht. Von der Seite gibt es also kein Problem. Wird beim Schreiben eine Kodierung verwendet, die den gesamten Unicode-Bereich abdeckt können alle Zeichen außer < und & und innerhalb von Attributen entweder ' oder " ohne Umschreibung durch &#xyz; geschrieben werden und werden von Elementtree auch direkt geschrieben. Für andere Encodings, die nicht den gesamten Unicode-Bereich abdecken ist es natürlich umumgänglich nicht-unterstützte Zeichen zu umschreiben. Das wird sogar von Pythons »encode« direkt unterstützt:

Code: Alles auswählen

>>> u"☂".encode("latin1", "xmlcharrefreplace")
'&#9730;'
>>> u"Schweißfüße".encode("ascii", "xmlcharrefreplace")
'Schwei&#223;f&#252;&#223;e'
mleopold
User
Beiträge: 15
Registriert: Dienstag 4. Juni 2013, 16:05

Danke. Das war ein guter Hinweis. mleopold
Antworten