2016-03-18 17 views
0

Ich versuche, Zeilenumbrüche (&#xA;) durch <br /> zu ersetzen. Allerdings kann ich die tatsächlichen <br /> Tags nicht angezeigt bekommen.Ersetzen Sie eine Zeichenfolge mit HTML in XSLT 1.0

Invocation:

<xsl:variable name="br"><br /></xsl:variable> 
<xsl:call-template name="string-replace-all"> 
    <xsl:with-param name="text" select="@SolutionNote" /> 
    <xsl:with-param name="replace" select="'&#xA;'" /> 
    <xsl:with-param name="by" select="$br" /> 
</xsl:call-template> 

string-replace-all von der in this Frage gegebenen Antwort genommen wird (klebte hier für eine schnelle Referenz):

<xsl:template name="string-replace-all"> 
    <xsl:param name="text" /> 
    <xsl:param name="replace" /> 
    <xsl:param name="by" /> 
    <xsl:choose> 
     <xsl:when test="$text = '' or $replace = ''or not($replace)" > 
      <!-- Prevent this routine from hanging --> 
      <xsl:value-of select="$text" /> 
     </xsl:when> 
     <xsl:when test="contains($text, $replace)"> 
      <xsl:value-of select="substring-before($text,$replace)" /> 
      <xsl:value-of select="$by" /> 
      <xsl:call-template name="string-replace-all"> 
       <xsl:with-param name="text" select="substring-after($text,$replace)" /> 
       <xsl:with-param name="replace" select="$replace" /> 
       <xsl:with-param name="by" select="$by" /> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="$text" /> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 

Testen mit einem Stringliteral statt $br bestätigt, dass es in der Tat Dinge, die ersetzt werden. Die Zeilenumbrüche sind auch weg - nur mit scheinbar nichts ersetzt. Wie lautet die korrekte Deklaration/Verwendung der Variablen br?

Antwort

0

Das Problem ist, mit dieser Zeile:

<xsl:value-of select="$by" /> 

Dies liegt daran, xsl:value-of gibt den Textwert von was auch immer ausgewählt wird. In diesem Fall, wenn dies XSLT 1.0 ist, ist die $by Variable tatsächlich ein Ergebnisbaumfragment.

Was Sie tun müssen, ist die Verwendung xsl:copy-of statt:

<xsl:copy-of select="$by" /> 
Verwandte Themen