Announcement

Collapse
No announcement yet.

HTML Elemente umwandeln mit XSLT

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • HTML Elemente umwandeln mit XSLT

    Hallo zusammen,
    Ich bin auf der Suche nach einer Art HTML Umwandler.
    Das Ziel wäre es, eine beliebige html struktur zu bekommen und dann in eine andere html struktur umzuwandeln.
    Z.B. sollte ein beliebiger html content in eine html liste umgwandelt werden.

    Wenn also
    <div>
    <p> hallo </p>
    <p> welt </p>
    <p> </p>
    </div>

    der empfangene Content wäre, würde die beste Listenumwandlung wohl etwa so aussehen:

    <ul>
    <li> hallo </li>
    <li> welt </li>
    <li> </li>
    </ul>

    Die Frage ist nun, ob es schon irgendein Java Projekt gibt, das man (und wenn auch nur als Basis) für so ein Projekt verwenden könnte.

    Kennt ihr da irgendwas das in die Richtung geht, oder wie würdet ihr so ein Projekt ansonsten angehen?

    Wenn ich hierfür ein XSLT Regelwerk aufsetzen müsste, würde das funktionieren? Das Problem ist, dass die XML Eingangsstruktur viele verschiedene Formate haben kann. Und dann aber in die gleiche Ausgangsstruktur (in dem Beispiel eine Liste) umgewandelt werden soll.

    Das heißt, ich bekomme eine beliebige Eingangsnachricht und möchte diese in eine vorgegebene Ausgangsstruktur umwandeln.
    Kann ich hierfür ein generisches XSLT bauen, welches viele Umwandlungen für die verschiedenen Eingansformate enthält, oder müsste ich verschiedene XSLT Dateien bauen und dann immer das für die eingehende Struktur passende XSLT aufrufen? In dem Fall müsste ich ja vorher noch die Eingangsstruktur analysieren, was die ganze Sache umständlicher machen würde.

    Würde mich freuen, wenn ihr mir hier auf die Sprünge helfen könntet.

  • #2
    XSLT erwartet in erster Linie XML als Eingabeformat, so du also wohlgeformtes XHTML hast, kannst du es zumindest mit XSLT ohne Probleme verarbeiten. Wenn es aber HTML-Tag-Suppe ist, dann ist die Verarbeitung mit XSLT nicht ohne weiteres möglich, da muss man erst prüfen, ob es zum gewählten XSLT-Prozessor einen Parser gibt, der die Verabeitung von HTML-Tag-Suppe erlaubt und dann ein passendes Eingabeformat zum XSLT-Prozessor liefert.

    Mit XSLT kannst du Transformationsregeln aufstellen, aber die Problembeschreibung "beliebiger html content in eine html liste" ist mir viel zu vage, als dass ich beurteilen kann, ob bzw. wie man das mit XSLT lösen kann.

    Das eine Beispiel lässt sich sicher mit XSLT umsetzen, aber die Frage nach "ein generisches XSLT bauen" vermag ich nicht zu beantworten.

    Comment


    • #3
      Danke für die Antwort!
      Ich bekomme valides XHTML durch das pre processing (HTMLCleaner) des eingehenden Codes.

      Um das Problem nochmal näher zu beschreiben:
      Ich weiß nicht, was für eine HTML Struktur ich bekomme, möchte aber egal was rein kommt alles auf eine bestimmte Ausgangsstruktur mappen, wie die Liste im vorherigen Beispiel.

      Das heißt, ich würde mir im ersten Schritt verschiedene Fälle überlegen, wie die rein kommende HTML Struktur aussehen könnte und würde dann für jede dieser möglichen Strukturen ein xslt Mapping auf mein Zielformat anlegen.

      Mögliche Beispiele für eine eingehende Nachricht:

      HTML Code:
      <div>
      <p> hallo </p>
      <p> welt </p>
      <p>!</p>
      </div>
      HTML Code:
      <div>
      <div> hallo </div>
      <div> welt </div>
      <div>!</div>
      </div>
      HTML Code:
      <span> hallo </span>
      <span> welt </span>
      <span>!</span>
      Zur Laufzeit müsste dann aber jeweils das richtige Mapping gezogen werden, also genau das Mapping das zum Format der eingehenden Nachricht passt. Ich bin mir aber nicht sicher, ob das schon in einem xslt Mapping selbst sichergestellt werden kann, oder ob ich lauter verschiedene xslt Dateien anlegen müsste und dann zur Laufzeit meine eingehende Nachricht mit Regex Regeln untersuche, um die passende xslt datei zu verwenden.

      Comment


      • #4
        Die beiden ersten Beispiele lassen sich sicher mit
        Code:
        <xsl:template match="div[*]">
          <ul>
            <xsl:apply-templates/>
          </ul>
        </xsl:template>
        <xsl:template match="div/*">
          <li>
            <xsl:apply-templates/>
          </li>
        </xsl:template>
        oder ähnlich in einem Stylesheet lösen. Was aus dem letzten Beispiel werden soll, ist mir nicht klar (und es fehlt ein Wurzelelement). Ob reguläre Ausdrücke helfen, wenn das mächtige XSLT "pattern matching" nicht ausreicht, bezweifle ich. Aber bis jetzt ist alles immer noch sehr vage.

        Comment

        Working...
        X