PrettyXML: Schönerer Code geparst mit Expat

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Moinsen,

hier die erste Version meines PrettyPrinters für wohlgeformten XML/HTML-Code. Ja, sowas gibt es bereits, aber das macht ja nichts. :)

Code: Alles auswählen

In [1]: from prettyxml import prettify

In [2]: code = '<html><head><title>Hello, World!</title></head><body><p id="greet" name="world">Hello, <strong>World</strong>!</p></body></html>'

In [3]: print prettify(code)
------> print(prettify(code))
<html>
  <head>
    <title>Hello, World!</title>
  </head>
  <body>
    <p id="greet" name="world">Hello, <strong>World</strong>!</p>
  </body>
</html>
Ist bisher noch nicht so intensiv getestet und soll auch erstmal ein Anfang sein. Kriterien: Grundsätzlich wird für ein neues Element eine neue Zeile begonnen und die Einrückungsstufe erhöht. Die Einrückung selbst wird durch Anzahl der Leerzeichen mitgegeben, Standardwert ist 2. Wenn sich Text innerhalb des Elements befindet, wird so lange in der selben Zeile geschrieben, bis die Anzahl der Start-Tags durch die Anzahl der End-Tags ausgeglichen wurde. Eine Überprüfung auf Namensgleichheit der Tags findet (noch) nicht statt.

Den Code gibt's hier. Optimierungsvorschläge sind natürlich immer willkommen. :)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Gehe ich recht in der Annahme, dass "wohlgeformt" hier "schoen aussehend" heisst?
In der XML-Welt steht "well-formed" allerdings fuer gueltiges XML.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich meinte eigentlich auch gültig. Bei ungültigen Eingaben sollte sich Expat ja beschweren.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich möchte noch klugscheißen und anmerken, dass das Umformatieren von XML natürlich das Dokument ändert, denn jeder Text, auch Leerzeichen, Teil des Dokuments sind. Für XHTML mag das egal sein, doch für XML an sich kann das über Sieg oder Niederlage entscheiden - insbesondere, wenn eine kanonische Form verlangt ist oder eine Signatur gemäß XML DSIG vorhanden ist.

Bei einem Blick auf den Quelltext würde ich sagen, dass " in Attributwerten oder < und & im Text nicht korrekt formatiert wird. Diese drei Zeichen müssen laut XML-Spec ja als Entities dargestellt werden.

Stefan
Antworten