1

私は Symphony CMS で記事の画像を返そうとしています。

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

出力は次のようになります

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

ノード値を返そうとすると

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

出力は正しく見える

penuts_thumb.png

余分な文字をすべて取得している理由について何か考えはありますか?

4

1 に答える 1

5
Output looks correct

いいえ、ブラウザは空白文字を無視するため、「正しく見える」だけです。

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

この変換は、それぞれの場合に何が生成されるかを正確に確認するのに役立ちます。

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

この XML ドキュメントに適用した場合:

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

この出力を生成します

<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)}"/>
于 2011-12-30T17:20:11.580 に答える