Alexander Ganz: XML tags gegen HTML Tags in value-of ersetzen?

Hallo mal wieder,

der XSL Kram macht mich fertig ;-)
Hab da noch ne Frage: Ich gebe über xsl:value-of... den Text eines Knotens aus, in diesem Knoten befinden sich aber weitere Tags, die durch HTML Tags ersetzt werden müssen.
Ungefähr so:
<text>Dies ist ein <break/> Text</text>
Das "<break/>" soll also gegen ein "<br/>" ausgetauscht werden.
Hat jemand irgendeine Ahnung, wie ich das anstellen kann? Ist value-of vielleicht doch die falsche Wahl?
Ein kleiner Stupser wäre toll.

Viele Grüße
Alex

  1. Hallo,

    der XSL Kram macht mich fertig ;-)
    Hab da noch ne Frage: Ich gebe über xsl:value-of... den Text eines Knotens aus, in diesem Knoten befinden sich aber weitere Tags, die durch HTML Tags ersetzt werden müssen.
    Ungefähr so:
    <text>Dies ist ein <break/> Text</text>
    Das "<break/>" soll also gegen ein "<br/>" ausgetauscht werden.
    Hat jemand irgendeine Ahnung, wie ich das anstellen kann? Ist value-of vielleicht doch die falsche Wahl?

    was spricht gegen ein einfaches xsl:apply-templates/ und (in diesem Beispiel) ein eigenes Template für <break/>?

    Schönen Gruß

    Rainer

  2. Hallo Alex,

    Ungefähr so:
    <text>Dies ist ein <break/> Text</text>
    Das "<break/>" soll also gegen ein "<br/>" ausgetauscht werden.
    Hat jemand irgendeine Ahnung, wie ich das anstellen kann? Ist value-of vielleicht doch die falsche Wahl?
    Ein kleiner Stupser wäre toll.

    Ersetze <xsl:value-of select="text" /> duch  <xsl:apply-templates select="text"/> und wie Rainer sagt, erstelle einen eigenen Template für <text> und <break>.
    <xsl:template match="text">
       xsl:apply-templates/
    </xsl:template>

    Grüße
    Thomas

    1. Hallo Rainer und Thomas,

      Ersetze <xsl:value-of select="text" /> duch  <xsl:apply-templates select="text"/> und wie Rainer sagt, erstelle einen eigenen Template für <text> und <break>.
      <xsl:template match="text">
         xsl:apply-templates/
      </xsl:template>

      erstmal, vielen Dank für die Hilfe.
      Allerdings hatte ich vergessen zu erwähnen, dass es sich bei dem Text um eine Variable handelt (param).
      Aber mann kann nicht auf $text matchen :-(
      Das heisst also, ich kriege das so nicht hin.

      Noch irgendeine Idee?

      Viele Grüße
      Alex

      1. Hallo Alex,

        Allerdings hatte ich vergessen zu erwähnen, dass es sich bei dem Text um eine Variable handelt (param).

        bevor noch mehr vergessen wird, kannst du bitte die relevanten Teile deines XSLs einfach reinkopieren?

        Grüße
        Thomas

        1. Hallo Thomas,

          bevor noch mehr vergessen wird, kannst du bitte die relevanten Teile deines XSLs einfach reinkopieren?

          Klar, kann ich machen, es geht um "headline" (ist wie gesagt - noch nicht fertig - dort müsste das "<break/>" gegen "<br>" ausgetauscht werden):

          <xsl:call-template name="leftcontent">
           <xsl:with-param name="headline" select="dxl:item[@name='Headline_15']/dxl:textlist/dxl:text"/>
           <xsl:with-param name="bereich_def" select="dxl:item[@name='Bereich_Definition_15']/dxl:textlist/dxl:text"/>
           <xsl:with-param name="tabelle" select="dxl:item[@name='Tabelle_15']"/>
           <xsl:with-param name="fliesstext" select="dxl:item[@name='Fliesstext_15']/dxl:textlist/dxl:text"/>
          </xsl:call-template>
           <xsl:template name="leftcontent" match="dxl:item">
            <xsl:param name="headline"/>
            <xsl:param name="bereich_def"/>
            <xsl:param name="tabelle"/>
            <xsl:param name="fliesstext"/>
             <xsl:if test="string-length($headline) > 0">
              <b>
               <xsl:apply-templates select="$headline">
               <xsl:with-param name="$headline"></xsl:with-param>
               </xsl:apply-templates>
              </b>
             </xsl:if>
             <xsl:if test="string-length($bereich_def) > 0">
              <b>
               <xsl:value-of select="$bereich_def"/>
              </b>
             </xsl:if>
             <xsl:if test="string-length($tabelle) > 0">
              <xsl:copy-of select="$tabelle"></xsl:copy-of>
              <br/>
              <span class="small">
               <xsl:value-of select="$tabelle"/>
              </span>
              <br/>
             </xsl:if>
             <xsl:if test="string-length($fliesstext) > 0">
              <br/>
              <span class="small">
               <xsl:value-of select="$fliesstext"/>
              </span>
              <br/>
             </xsl:if>
           </xsl:template>

          Viele Grüße und danke für´s gucken!
          Alex

          1. Hallo Thomas,

            es hat sich erledigt :-) Ich hab´s geschafft.
            eigentlich ist es ja auch ganz logisch:

            <xsl:apply-templates select="$headline"/>
            [...]
            <xsl:template match="dxl:break">
             <br/>
            </xsl:template>

            Danke!
            Manchmal dauert es etwas länger bei mir *uahh*

            Viele Grüße
            Alex