# XML Prettyprinter zu HTML



## slawaweis (24. Feb 2011)

Hallo,

ich brauche einen Prettyprinter, welcher ein XML Dokument für die Darstellung in einer Webseite aufbereitet und über Ant steuerbar ist. Weiterhin wollte ich die Darstellung etwas aufbohren (verschiedene Farben für verschiedene Namespaces, klickbare Tagnamen, Popups für Beschreibungen einzelner Elemente, ...). Ich habe dazu bisher kein passendes vorhandenes Werkzeug gefunden.

So wollte ich eins selber erstellen. Nachdem ich XSL, DOM, StAX, SAX und SAX2 durch habe, habe ich festgestellt, dass bei allen diesen Verfahren Informationen verloren gehen. Ich möchte das so etwas:


```
<tag aaaa="value"
           bbb="value"
           ccc="value"
           ddd="Text Text Text
                   Text Text Text
                   Text Text Text
        Text Text Text
                      Text Text Text
                     "
           />
```

exakt so auch bleibt. Jedes Leerzeichen, jeder Zeilenumbruch sollte erhalten bleiben. Leider gehen bei den oben erwähnten Verfahren Whitespaces verloren und ich weis nicht ob man das anders konfigurieren kann. Bevor ich das ganze jetzt Low-Level mache, wollte ich fragen, ob es eine einfachere Möglichkeit gibt. Oder ob es ein Werkzeug dafür gibt, welches meinen Anforderungen entspricht.

Slawa


----------



## Noctarius (24. Feb 2011)

Ich denke du suchst etwas wie einen Syntax-Highlighter in XSLT


----------



## slawaweis (24. Feb 2011)

Noctarius hat gesagt.:


> Ich denke du suchst etwas wie einen Syntax-Highlighter in XSLT


ich habe sogar ein Stylesheet schon fertig geschrieben, eben bis auf die Sache, dass die Attribute alle in eine Zeile eingereiht werden. Wenn jemand weist, wie man es umgeht, wäre ich dankbar für Hinweise.

Slawa


----------



## slawaweis (25. Feb 2011)

habe das Problem jetzt mit Regex gelöst. Mit diesem Pattern, welches von einem validen Dokument ausgeht:


```
Pattern p = Pattern.compile(
        "(<\\?.*?\\?>)"                    // 1. PI <?xml version="1.0" ?>
      + "|(<!--.*?-->)"                    // 2. Comment <!-- -->
      + "|(\\w*:?\\w*\\s*=\\s*\"[^\"]*\")" // 3. Attribute a="b" | c:a="b"
      + "|(\\w*:?\\w*\\s*=\\s*'[^\']*')"   // 4. Attribute a='b' | c:a='b'
      + "|(</?\\w*:?\\w*\\s*>)"            // 5. Tag <tag> | </tag> | <c:tag> | </c:tag>
      + "|(<\\w*:?\\w*)"                   // 6. Tag <tag | <c:tag
      + "|(/?>)"                           // 7. Tag End /> | >
      , Pattern.DOTALL);
```


zerlege ich ein XML-Dokument in Stringform in Einzelteile und iteriere mit einem Matcher darüber. Funktioniert für meine Vorlagen hervorragend. Ich bin jetzt aber kein Profi in Sachen Regex. Falls jemand Verbesserungen oder Fehler in meinem Pattern findet, bitte Bescheid sagen.

Slawa


----------

