Rondra: HTML-Elemente im XML-Code

Hallo !

folgendes Problem: ich möchte den Inhalt eines XMLS durch XSL in HTML umwandeln und dabei Wörter "highlighten", die im XML gekennzeichnet sind. Hier mein XML-Ausschnitt:

<FELDER>
    <FELD>Das ist ein <rot>Text</rot>.</FELD>
    <FELD>Der nächste <rot>ebenfalls</rot>.</FELD>
</FELDER>

und hier mein XSL-ausschnitt:

<xsl:for-each select="FELDER/FELD">
 <pre>
    <xsl:value-of select="text()"/>
 </pre>
</xsl:for-each>

Ich MUSS leider PRE-tags verwenden.
Und jetzt möchte ich das mit "<rot>" gekennzeichnete Wort im XML erkennen und meine XSL so anpassen, dass es nachher im HTML output dementsprechend rot angezeigt wird. Der HTML-code sollte so aussehen:
--------------------------
<style>
.rot {color: red;}
</style>

Das ist ein <font class="rot">Text</font>.
---------------------------
Wie muss meine XML aussehen, damit ich in der XSL das so hinkriege? Mit

<FELDER>
    <FELD>Das ist ein <![CDATA[<rot>Text</rot>]]>.</FELD>
    <FELD>Der nächste <![CDATA[<rot>ebenfalls</rot>]]>.</FELD>

</FELDER>

gehts nicht, die Tags werden nicht erkannt; dann steht nachher im Browser das hier: <rot>Text</rot>

Ich hoffe das war einigermassen verständlich...

Vielen DANK im Voraus !!

liebe Grüsse
Rondra

  1. Hi,

    Hallo !

    folgendes Problem: ich möchte den Inhalt eines XMLS durch XSL in HTML umwandeln und dabei Wörter "highlighten", die im XML gekennzeichnet sind. Hier mein XML-Ausschnitt:

    <FELDER>
        <FELD>Das ist ein <rot>Text</rot>.</FELD>
        <FELD>Der nächste <rot>ebenfalls</rot>.</FELD>
    </FELDER>

    und hier mein XSL-ausschnitt:

    <xsl:for-each select="FELDER/FELD">
    <pre>
        <xsl:value-of select="text()"/>

    statt des value-of hätt ich jetzt hier ein apply-templates select="." gemacht.

    Und dann noch ein Template für das rot-Element, das ein <span class="rot"> samt Inhalt und </span> ausgibt.

    </pre>
    </xsl:for-each>

    <style>

    aber bitte mit type-Attribut.

    .rot {color: red;}
    </style>

    Das ist ein <font class="rot">Text</font>.

    font ist deprecated.

    <FELD>Das ist ein <![CDATA[<rot>Text</rot>]]>.</FELD>
    gehts nicht, die Tags werden nicht erkannt; dann steht nachher im Browser das hier: <rot>Text</rot>

    Wie auch, Du sagst ja extra, daß jetzt keine Tags kommen.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.mud-guard.de/
  2. Hallo,

    folgendes Problem: ich möchte den Inhalt eines XMLS durch XSL in HTML umwandeln und dabei Wörter "highlighten", die im XML gekennzeichnet sind. Hier mein XML-Ausschnitt:

    <FELDER>
        <FELD>Das ist ein <rot>Text</rot>.</FELD>
        <FELD>Der nächste <rot>ebenfalls</rot>.</FELD>
    </FELDER>

    und hier mein XSL-ausschnitt:

    <xsl:for-each select="FELDER/FELD">
     <pre>
        <xsl:value-of select="text()"/>
     </pre>
    </xsl:for-each>

    Probiere es so (ohne xsl:for-each-Konstrukt):

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

    <xsl:output
        method="html"
        doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
        doctype-system="http://www.w3.org/TR/html401/loose.dtd"
        encoding="ISO-8859-1"
        version="4.01"
        indent="yes"
    />

    <xsl:template match="/">

    <html>
    <head>
    <title>Test by TM 01/04</title>
    <style type="text/css">
    .rot
    {
    color: #F00;
    background-color: #FFF;
    }
    </style>
    </head>
    <body>
      xsl:apply-templates/
    </body>
    </html>

    </xsl:template>

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

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

    <xsl:template match="text()">
      <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="rot">
      <span class="rot"><xsl:value-of select="."/></span>
    </xsl:template>

    </xsl:stylesheet>

    MfG, Thomas

    --
    SVG - Learning By Coding
    http://svglbc.datenverdrahten.de/
    1. Hi,

      Probiere es so (ohne xsl:for-each-Konstrukt):

      Hehe, bin ich ja doch nicht der einzige, der for-each zu vermeiden versucht...

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.mud-guard.de/