Steffen: In XML eingebettetes HTML ausgeben

Hallo allerseits!

Ich hab ein kleines Problem, dass ich trotz laengere Suche in
diversen Online-FAQ etc. nicht loesen konnte. Mehrere Tips
beziehen sich zwar auf dieses Problem, nur funktionieren die
vorgestellten Loesungen nicht. Vielleicht kennt jemand von Euch eine Lösung:

Ich lese aus einer Datenbank strukturierte Texte aus und erzeuge
XML-Dateien (entsprechende DTD hab ich auch...egal). Leider sind
Teile dieser DB mit HTML-Tags ausgezeichnet (Altlast, zuviel um das
zu aendern!). Diese bette ich in XML ein nach der Form

<HtmlEinschub>
  <table> ...
   ... (HTML eben)
</HtmlEinschub>

Die HTML-Tags werden von einem Script geparst und XML-konform gemacht (also fehlende Endtags eingefuegt, Gross/Kleinschreibung..
sprich die XML Datei ist wohlgeformt).

XSL soll jetzt dafuer sorgen, dass ausser dem weitaus groesserem,
XML-basierten Texten auch die Teile mit HTML-Auszeichnung ausgegeben
werden (und die HTML-Tags natuerlich als solche interpretiert werden).

Hat jemand vielleicht eine Ahnung, wie das funktioniert? (vielleicht eine 3-Zeilen XML Datei mit Stylesheet)

Im vorraus Danke.

Steffen

  1. Hallo Steffen,

    XSL soll jetzt dafuer sorgen, dass ausser dem weitaus groesserem,
    XML-basierten Texten auch die Teile mit HTML-Auszeichnung ausgegeben
    werden (und die HTML-Tags natuerlich als solche interpretiert werden).

    Ich nehme einfach mal an, du möchtes alles, was innerhalb eines XML-Tags mit dem Namen <HtmlEinschub> steht direkt in den Ergebnisbaum (das Ergebnisdokument) schreiben, welcher ein HTML-Dokument darstellt. Dazu benötigst du zwei Dinge zu dem sonstigen Template-Kram:

    1. Die Anweisung xsl:output als Top-Level-Element mit dem Attribut method und dem Wert "html" für dieses Attribut.
    2. Die Anweisung xsl:copy-of, um Teile des Quellbaums (Quelldokuments) mitsamt der Kinder in den Ergebnisbaum zu schreiben

    Also z.B.:

    XML-Datei

    <?xml version="1.0" encoding="iso-8859-1"?>

    <ausgabe>
      <keinHtml>Es folgt HTML aus dem Quelldokument:</keinHtml>
      <HtmlAuszug>
        <p>Ein schöner HTML-Paragraph
          <br/> Ja auch mit Zeilenumbrüchen und schön XML-konform.
          Und noch ne Tabelle
          <table border="1">
            <tr>
              <td>Zelle 1</td>
              <td>Zelle 2</td>
            </tr>
          </table>
        </p>
      </HtmlAuszug>
    </ausgabe>

    XSLT-Datei

    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns="http://www.w3.org/TR/REC-html40">

    <xsl:output method="html"/>

    <xsl:template match="/">

    <html>
          <head>
            <title>Ausgabe von HTML mit xsl:copy</title>
          </head>
          <body>
             <xsl:apply-templates />
          </body>
        </html>

    </xsl:template>

    <xsl:template match="keinHtml">
        xsl:apply-templates/
      </xsl:template>

    <xsl:template match="HtmlAuszug">
        <xsl:copy-of select="."/>
      </xsl:template>

    </xsl:stylesheet>

    <xsl:ouput method="html"/> sorgt dafür, dass das XHTML als HTML ausgegeben wird. Also <br/> zu <br> wird usw.

    Für die HtmlAuszug-Elemente gibt es eine eigene Template-Rule, welche dir einfach nur den Inhalt des Elements in das Ergebnis-Dokument kopiert.

    Hoffe das hilft dir weiter.

    Gruß
    Franz

    1. Hallo Franz,

      erstmal danke fuer den Tip. Prinzipiell muesste es so funktionieren.
      Nur tut der IE 5.0/5.5 das nicht. Er zeigt ueberhaupt nichts an.
      Bis jetzt hab ich dem IE nur etwas entlocken koennen, wenn ich den
      alten <xsl:stylesheet xmlns:xsl='http://www.w3.org/TR/WD-xsl'> Namespace
      verwende, nicht aber den neuen w3 konformen XSLT.

      Hat jemand vielleicht eine Idee?

      Danke

      Steffen

      1. Hallo,

        erstmal danke fuer den Tip. Prinzipiell muesste es so funktionieren.

        nicht nur prinzipiell ;-)

        Nur tut der IE 5.0/5.5 das nicht. Er zeigt ueberhaupt nichts an.
        Bis jetzt hab ich dem IE nur etwas entlocken koennen, wenn ich den
        alten <xsl:stylesheet xmlns:xsl='http://www.w3.org/TR/WD-xsl'> Namespace
        verwende, nicht aber den neuen w3 konformen XSLT.

        Hat jemand vielleicht eine Idee?

        Du hast sozusagen _die_ FAQ im Zusammenhang mit IE und XSLT erwischt ;-)

        Lösung: updaten auf den aktuellen msxml-Parser im IE, der ausgeliefert wird ist noch der Parser drin.

        Aktuelle Version hier:
        http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/591/msdncompositedoc.xml

        Dabei gibt es einiges zu beachten, hervorragend zu dem Thema:
        http://www.netcrucible.com/xslt/msxml-faq.htm

        Gruß
        Franz

        1. Grüssi!

          http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/591/msdncompositedoc.xml

          Also, ich finde dieser Link hat den (hier und jetzt ins Leben gerufenen) Preis für die verrückteste Url redlich verdient *fg* Da bekommt man ja fast nen Parametrischen-Directory-Drehwurm wenn man den liest ;-)

          lg bernhard

          1. Hallo Bernhard,

            http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/591/msdncompositedoc.xml

            Also, ich finde dieser Link hat den (hier und jetzt ins Leben gerufenen) Preis für die verrückteste Url redlich verdient *fg* Da bekommt man ja fast nen Parametrischen-Directory-Drehwurm wenn man den liest ;-)

            gut, ne *sg* (stolz grins).
            Preisgeld bitte auf Kto:56432 BLZ: 6765868 Stichwort: URLs im neuen Jahrtausend.

            Ich erinnere mich noch an einen lustigen Thread zu dem Thema, den ich nicht so ganz nachvollziehen konnte (mal war der Link korrekt mal nicht, war mir irgendwie zu hoch ;-) )

            Aber dafür habe ich nun das M$-System begriffen: Man muss(te) nämlich getUrl anklicken, damit dann die entsprechende Seite auch wirklich verlinkbar war, ansonsten ist man immer irgendwo gelandet, aber nie auf der Seite, die man eigentlich verlinken wollte (wegen Frames usw.).

            Gruß
            Franz

            PS: haste wenigstens gevotet ;-)

            1. Grüssi Franz!

              Preisgeld bitte auf Kto:56432 BLZ: 6765868 Stichwort: URLs im neuen Jahrtausend.

              Ich hab einen Konkurrenten gefunden: Zwar nicht ganz so rekursiv, dafür aber schön brav verschachtelt:

              http://www.jungekarriere.com/jukawwwangebot/fn/juka/SH/0/sfn/buildjuka/cn/cn_ausland_detail/page1/page_8/page2/page_551/aktelem/PAGE_612/Land/'ES'/Fachrichtung//ID/50/index.html

              Besonders das '//' im hinteren Drittel macht mich etwas stutzig ;-)

              Ich erinnere mich noch an einen lustigen Thread zu dem Thema, den ich nicht so ganz nachvollziehen konnte (mal war der Link korrekt mal nicht, war mir irgendwie zu hoch ;-) )

              hmmmm ... ähm .... welchen meinst du? Hab ich den etwa verschlafen?

              PS: haste wenigstens gevotet ;-)

              Freili!

              lg bernhard

              1. Besonders das '//' im hinteren Drittel macht mich etwas stutzig ;-)

                http://www.teamone.de//////////////////selfaktuell//////////////////

        2. Lösung: updaten auf den aktuellen msxml-Parser im IE, der ausgeliefert wird ist noch der Parser drin.

          Hm, also nicht nur die kränkeste URL, sondern auch die kränkeste Lösung!

          Gemeint ist natürlich, dass der IE 5.0/5.5 noch eine alte Version des msxml-Parsers mit ausliefert, die noch einen Entwurfs-Namensraum von XSLT nutzt und ansonsten auch keine volle (wenn überhaupt halbe) Implementierung des aktuellen XSLT 1.0-Standards enthält, dafür aber beruhigenderweise einige MS-Erweiterungen.

          So,

          Gute Nacht allerseits
          Franz

          1. Endlich, es funktioniert.

            Dank Dir Franz!