2017-07-12 5 views
0

XSLTでの改行に変換し得ていない:以下に示すようにBRは、私は電子メールの本文を生成するために、XSLTを使用しています

<?xml version="1.0"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" indent="yes"/> 
    <xsl:param name="Test"/>  
    <xsl:template match="/"> 
     <html> 
      <body> 
       <br/>Test: <xsl:value-of select="$Test"/> 
      </body> 
     </html> 
    </xsl:template> 
    </xsl:stylesheet> 

とテストパラメータの値が"sample <br> sample" である。しかし、メールの本文に、私は<br>を取得していますタグをそのまま使用します。 改行に変換されません。 しかし、私はそれを直接XSLTテンプレートに入れて、それが動作しています。 brタグがパラメータ値にあるときだけ、それは機能しません。 これを解決する方法はありますか?

+0

[XSL変数にHTMLタグを挿入することができます](https://stackoverflow.com/questions/13200567/can-we-insert-html-tags-in-xsl-variable) –

答えて

1

テキストノード以上のノードを作成する可能性がある場合は、value-ofの代わりに<xsl:copy-of select="$Test"/>を使用する必要があります。ただし、その場合は、文字列ではなく、結果ツリーのフラグメントまたはノードをパラメータ値として渡す必要があります。文字列を渡す場合は、<xsl:value-of select="$Test" disable-output-escaping="yes"/>を使用して、あなたのプロセッサとセットアップでサポートされていることを確認してください。

文字列パラメータを持つあなたの例では、

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:param name="Test"><![CDATA[sample <br> sample]]></xsl:param>  
    <xsl:template match="/"> 
     <html> 
      <body> 
       <br/>Test: <xsl:value-of select="$Test" disable-output-escaping="yes"/> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

だろうと場合は、出力例えばサポートパラメータ値とcopy-ofなどのフラグメントとの一方

<html> 
    <body><br>Test: sample <br> sample 
    </body> 
</html> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:param name="Test">sample <br/> sample</xsl:param>  
    <xsl:template match="/"> 
     <html> 
      <body> 
       <br/>Test: <xsl:copy-of select="$Test" /> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

のように、あなたは、任意のプロセッサと同じ出力が得られます。唯一の問題は、特にコマンドラインから実行したときに、パラメータ値としてフラグメントを渡すことです。

+0

は 'disable- output-escaping = "yes" 'しかし動作しませんでした。電子メールの本文にはまだ '
'タグが表示されています。 コピーしたものについて詳しく教えてもらえますか? –

+1

Ypuは、どのXSLTプロセッサを使用するか、どのようにパラメータを渡すか、どのような種類の値(文字列またはノード)を渡すかを具体的に説明する必要があります。 –

+0

フラグメントをその値として持つパラメータに 'xsl:copy-of'を使用するhttp://xsltransform.net/ehVYZN9/1を見ると、http://の間に' br'要素を出力します。 /xsltransform.net/ehVYZN9は 'xsl:value-of'を使用しても' br'要素を出力しません。 XSLTプロセッサのAPIをチェックして、示されているように 'xsl:copy-of'を使用できるようにノードフラグメントを渡す必要があります。 –

関連する問題