Seite 1 von 1

' ' mit ElementTree

Verfasst: Sonntag 6. September 2009, 20:59
von HWK
ET wirft einen Fehler, wenn es eine HTML-Datei mit ' ' parst, da ' ' kein Standard-XML ist. Das ist bekannt und habe ich durch

Code: Alles auswählen

parser = ET.XMLParser()
parser.entity["nbsp"] = unichr(160)
gelöst. Beim Speichern der geänderten HTML-Datei möchte ich aber wieder ' ' haben. Bisher habe ich es so gelöst, dass ich in einen StringIO geschrieben habe und dort

Code: Alles auswählen

replace(unichr(160), ' ')
durchgeführt habe. Das ist aber alles etwas umständlich. Gibt es keine elegantere Lösung?
MfG
HWK

Verfasst: Sonntag 6. September 2009, 21:38
von burli
Hab das gerade gestern gelesen. Man bräuchte eine Definition für   in einer DTD. Weiß aber nicht mehr genau, wo ich das gelesen hab. Ich glaub, auf selfhtml

Gefunden

http://de.selfhtml.org/xml/regeln/allgemein.htm

Verfasst: Sonntag 6. September 2009, 21:56
von HWK
Danke für den Hinweis.
Ich habe das Problem mittlerweile aber anders gelöst. Ich wollte ' ', da IE unichr(160) im Gegensatz zu Firefox nicht korrekt dargestellt hat. Ich habe die HTML-Datei jetzt aber mit Encoding 'ascii' statt 'cp1252' gespeichert. Danach funktioniert es wieder, da jetzt '&#160' verwendet wird.
MfG
HWK

Verfasst: Sonntag 6. September 2009, 23:00
von Darii
HWK hat geschrieben:Ich habe die HTML-Datei jetzt aber mit Encoding 'ascii' statt 'cp1252' gespeichert. Danach funktioniert es wieder, da jetzt '&#160' verwendet wird.
Nur gut, dass ACSII nur 128 Zeichen hat. ;) Verwende lieber Unicode(utf8), dann hast du keine Probleme mehr mit irgendwelchen Zeichen die nicht in der Kodierung enthalten sind.

Verfasst: Montag 7. September 2009, 12:03
von HWK
Es liegt nicht an Zeichen, die nicht in der Codierung vorhanden sind. Firefox stellt die Datei z.B. auch mit cp1252 vernünftig dar.
Das Problem lag eher hieran:

Code: Alles auswählen

<?xml version='1.0' encoding='cp1252'?>
<html>
<head>
<meta content="text/html; charset=ascii" http-equiv="Content-Type" />
ET setzt das Encoding für xml. IE verwendet aber offensichtlich im Gegensatz zu Firefox das Encoding im Meta-Tag, das durch die Ursprungs-HTML-Datei als ascii vorgegeben ist. Das einfachste ist also wohl, mit ET auch ascii zu verwenden. Und die Zeichen ab 128 werden ja als Entity dargestellt.
MfG
HWK