2016-03-18 12 views
0

<br /> ile satır sonlarını (&#xA;) değiştirmeye çalışıyorum. Ancak, gerçek <br /> etiketlerini gösteremiyorum.Bir dizeyi HTML ile değiştirin XSLT 1.0

Çağırma:

<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 (hızlı başvuru için buraya yapıştırılan) this söz verilen cevap alınır: yerine $br edebi bir dize ile

<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> 

Testi olduğunu doğruladı gerçekten değiştirilmekte olan şeyler. Satır kırıkları da gitti - sadece hiçbir şey görünmeyecek şekilde değiştirildi. br değişkenini bildirme/kullanmanın doğru yolu nedir?

cevap

0

sorun bu hat ile: xsl:value-of seçilir ne olursa olsun metin değerini verir, çünkü

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

olmasıdır. Bu durumda, bu XSLT 1.0 ise, $by değişkeni aslında bir sonuç ağacı-parçasıdır.

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

yapmanız gereken şey, bunun yerine kullanılması xsl:copy-of olduğunu