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)}"/>