2011-12-30 9 views
1

私はSymphony CMSの記事イメージを返そうとしています。Symphony CMSのOdd XSL出力

私はちょうど

<xsl:value-of select="image-thumbnail" /> 

出力が正しい

penuts_thumb.png 

なぜI上の任意の考えに見えるノードの値を返すようにしようとした場合、出力はこの

<img src="/workspace/uploads/%0A%09%09%09%09penuts_thumb.png%0A%09%09%09%09%0A%09%09%09"> 

のように見えます

<img src="{$workspace}/uploads/{/data/news-articles/entry/image-thumbnail}"/> 

余分なキャラクターをすべて手に入れていますか?いいえ、それは唯一の「正しいに見える」

答えて

5
Output looks correct 

ブラウザは、空白文字を無視するため。

文字列"penuts_thumb.png"は、空白文字で囲まれています。この空白がsrc属性値の一部としてシリアライズされると、エンコードされます(正規化されます)。これが%0A(改行コード)anf %09(タブのコード)と表示されます。

この変換は、それぞれの場合に生成されるまさに参照するのに役立ちます:

<data> 
<news-articles> 
    <entry> 
    <image-thumbnail> 
        penuts_thumb.png 
    </image-thumbnail> 
    </entry> 
</news-articles> 
</data> 

この出力を生成します。このXMLドキュメントに適用

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="yes"/> 
<xsl:variable name="workspace" select="'/workspace'"/> 


<xsl:template match="/"> 
    <img src="{$workspace}/uploads/{/data/news-articles/entry/image-thumbnail}"/> 
    =========== 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="entry"> 
    "<xsl:value-of select="image-thumbnail"/>" 
</xsl:template> 
</xsl:stylesheet> 

<img src="/workspace/uploads/%0A penuts_thumb.png%0A "> =========== " penuts_thumb.png " 

2番目のケースでは(引用符のおかげで)文字列"penuts_thumb.png"も多くの空白文字で囲まれています。

ソリューション

は、このようにnormalize-space()機能を使用します

<img src= 
"{$workspace}/uploads/{normalize-space(/data/news-articles/entry/image-thumbnail)}"/> 
+0

本当にありがとうございましたDimitreを私はそれから多くのことを学びました。 – acreek

+0

@acreek:どうぞよろしくお願いいたします。 –