Announcement

Collapse
No announcement yet.

xsl bestimmte Zeichen kursiv darstellen

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

  • xsl bestimmte Zeichen kursiv darstellen

    Hallo zusammen,

    folgende XML öffne ich mit Firefox.

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="xsl_Beisp1.xsl"?>

    <dataroot>

    <Inhalt>
    <Ueberschriften>
    <Zeile drs="12" Text="Hauptüberschrift"/>
    </Ueberschriften>

    <Ueberschriften>
    <Zeile drs="21" Text="erste +Zeile nächste= Überschrift"/>
    <Zeile drs="22" Text="zweite Zeile nächste Überschrift"/>
    </Ueberschriften>

    <Merkmale>
    </Merkmale>


    <Ueberschriften>
    <Zeile drs="32" Text="Flächenerhebung nach der tatsächlichen Nutzung"/>
    </Ueberschriften>

    <Ueberschriften>
    <Zeile drs="61" Text="Die Jahresangaben im Merkmalzeitschlüssel und Berichtszeitraum werden in der alten"/>
    <Zeile drs="61" Text="Nomenklatur weiter geführt: +d.h. Ergebnisse der Flächenerhebung sind mit den="/>
    <Zeile drs="62" Text="+Zeitschlüsseln 0500= abrufbar."/>
    </Ueberschriften>

    <Merkmale>
    </Merkmale>

    <Merkmale>
    </Merkmale>

    <Ueberschriften>
    <Zeile drs="42" Text="Gebäude- und Freifläche" />
    </Ueberschriften>

    </Inhalt>

    </dataroot>

    Die Dastellung unterschiedlicher Überschriftenebenen über das Attribut "drs" und Zeilenumbrüche habe ich gerade noch hin bekommen.

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

    <xsl:template match="/">
    <html>
    <body>
    <xsl:apply-imports />
    </body>
    </html>
    </xsl:template>

    <!-- 1) Ausgabe 'Urheber' u. 'Tabellenkopf: hier nicht enthalten -->

    <!-- 2) Ausgabe 'der Überschriften... -->

    <xsl:template match="Ueberschriften">

    <xsl:for-each select=".">

    <xsl:choose>
    <xsl:when test="Zeile/@drs &lt; '20'">
    <h1> <xsl:for-each select="Zeile">
    <xsl:value-of select= "@Text"/> <br/>
    </xsl:for-each>
    </h1>
    </xsl:when>

    <xsl:when test="Zeile/@drs &lt; '30'">
    <h3> <xsl:for-each select="Zeile">
    <xsl:value-of select= "@Text"/> <br/>
    </xsl:for-each>
    </h3>
    </xsl:when>

    <xsl:when test="Zeile/@drs &lt; '40'">
    <h4> <xsl:for-each select="Zeile">
    <xsl:value-of select= "@Text"/> <br/>
    </xsl:for-each>
    </h4>
    </xsl:when>

    <xsl:when test="Zeile/@drs &lt; '50'">
    <h5> <xsl:for-each select="Zeile">
    <xsl:value-of select= "@Text"/> <br/>
    </xsl:for-each>
    </h5>
    </xsl:when>

    <xsl:when test="Zeile/@drs &lt; '60'">
    <h6> <xsl:for-each select="Zeile">
    <xsl:value-of select= "@Text"/> <br/>
    </xsl:for-each>
    </h6>
    </xsl:when>

    <xsl:when test="Zeile/@drs &lt; '70'">
    <h6> <xsl:for-each select="Zeile">
    <xsl:value-of select= "@Text"/> <br/>
    </xsl:for-each>
    </h6>
    </xsl:when>

    </xsl:choose>

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

    <!-- 1) Ausgabe 'Merkmale': hier nicht enthalten -->
    <xsl:template match="Merkmale">
    <xsl:text>momentan unberücksichtigt</xsl:text> <br/>
    </xsl:template>

    </xsl:stylesheet>


    Wie kann ich erreichen, dass die von + und = eingeschlossenen Inhalte zusätzlich kursiv <i> dargestellt werden? Das Plus- und Gleichheitszeichen soll in der HTML-Ausgabe nicht mehr dargestellt werden.

    Habe es schon mit ersetzen von + mit <i> und = mit</i> versucht...
    Denke, das geht mit substring-before bzw. substring-after. Kann das aber leider selbst nicht umsetzen.

    Wer kann mir helfen?

    Danke und Gruß
    MaxW

  • #2
    Hier ist ein Beispiel für ein Template, das als Eingabe einen Text, zwei Trennzeichen und einen Elementnamen erwartet und dann in dem Text jeden in den Trennzeichen enthaltenen Teiltext in ein Element packt:
    Code:
      <xsl:template name="wrap">
        <xsl:param name="text"/>
        <xsl:param name="left-delim"/>
        <xsl:param name="right-delim"/>
        <xsl:param name="el-name"/>
        <xsl:choose>
          <xsl:when test="not(contains($text, $left-delim))">
            <xsl:value-of select="$text"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:variable name="tail" select="substring-after($text, $left-delim)"/>
            <xsl:choose>
              <xsl:when test="not(contains($tail, $right-delim))">
                <xsl:value-of select="$text"/>
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="substring-before($text, $left-delim)"/>
                <xsl:element name="{$el-name}">
                  <xsl:value-of select="substring-before($tail, $right-delim)"/>
                </xsl:element>
                <xsl:call-template name="wrap">
                  <xsl:with-param name="text" select="substring-after($tail, $right-delim)"/>
                  <xsl:with-param name="left-delim" select="$left-delim"/>
                  <xsl:with-param name="right-delim" select="$right-delim"/>
                  <xsl:with-param name="el-name" select="$el-name"/>
                </xsl:call-template>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
    Wenn man das auf
    Code:
    <Ueberschriften>
    <Zeile drs="21" Text="erste +Zeile nächste= Überschrift"/>
    <Zeile drs="22" Text="zweite Zeile nächste Überschrift"/>
    <Zeile Text="foo +bar= baz +foo bar= foobar"/>
    </Ueberschriften>
    mittels
    Code:
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
      
      <xsl:template name="wrap">
        <xsl:param name="text"/>
        <xsl:param name="left-delim"/>
        <xsl:param name="right-delim"/>
        <xsl:param name="el-name"/>
        <xsl:choose>
          <xsl:when test="not(contains($text, $left-delim))">
            <xsl:value-of select="$text"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:variable name="tail" select="substring-after($text, $left-delim)"/>
            <xsl:choose>
              <xsl:when test="not(contains($tail, $right-delim))">
                <xsl:value-of select="$text"/>
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="substring-before($text, $left-delim)"/>
                <xsl:element name="{$el-name}">
                  <xsl:value-of select="substring-before($tail, $right-delim)"/>
                </xsl:element>
                <xsl:call-template name="wrap">
                  <xsl:with-param name="text" select="substring-after($tail, $right-delim)"/>
                  <xsl:with-param name="left-delim" select="$left-delim"/>
                  <xsl:with-param name="right-delim" select="$right-delim"/>
                  <xsl:with-param name="el-name" select="$el-name"/>
                </xsl:call-template>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
      
      <xsl:template match="Zeile">
        <xsl:copy>
          <xsl:call-template name="wrap">
            <xsl:with-param name="text" select="@Text"/>
            <xsl:with-param name="left-delim" select="'+'"/>
            <xsl:with-param name="right-delim" select="'='"/>
            <xsl:with-param name="el-name" select="'i'"/>
          </xsl:call-template>
        </xsl:copy>
      </xsl:template>
      
    </xsl:stylesheet>
    anwendet, erhält man
    Code:
    <Zeile>erste <i>Zeile nächste</i> Überschrift</Zeile>
    <Zeile>zweite Zeile nächste Überschrift</Zeile>
    <Zeile>foo <i>bar</i> baz <i>foo bar</i> foobar</Zeile>

    Comment

    Working...
    X