' ' mit ElementTree

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Antworten