XML Prettyprinter zu HTML

slawaweis

Bekanntes Mitglied
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:

Code:
    <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
 
habe das Problem jetzt mit Regex gelöst. Mit diesem Pattern, welches von einem validen Dokument ausgeht:

Java:
  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
 

Zurück
Oben