Tagged: XML

今回は、右から来たXMLを左に受け流す方法について、覚書で残しておくことにした。
XMLを変換する方法はいくつかあるけど、今回は手軽なXSLTを使ってXMLをHTMLに変換してみる。
全体イメージ的には↓こんな感じになる。

┌────────┐ ┌─────┐ ┌────────┐
│[5]出力ファイル │ │[2]XSL  │ │[1]入力XML   │
│HTML,XML,CSV等 │←┤ファイル │←┤ファイル    │
└────────┘ └─────┘ └────────┘
              ↑
           ┌──┴──┐
           │[3]変換  │
           │プログラム│
           ├─────┤
           │[4]XSLT  │
           │プロセッサ│
           └─────┘

(さらに…)

前回に続き某Webサービスに挑戦中。
返されてきたXMLを使用し画像をHTML表示しようとするがうまくできない。
XSLT変換されたHTMLソースを見てみると

<img src=”http://sun.d-064.com/include/implession.php?flag1=samnail1&amp;amp;pid=4565″>

となっていた。
問題は、「&amp;amp;」の部分。
ここは「&」とならなければならない。
# ちなみに”&”の実体参照は”&amp;”となる。
これをXSLTで

<xsl:element name=”img”>
<xsl:attribute name=”src”><xsl:value-of select=”ImageUrlSmall” /></xsl:attribute>
</xsl:element>

と書き変換していた。
変換結果は「&amp;amp;」。
xsl:value-ofの属性としてdisable-output-escaping=”yes”を指定すると実体参照を変換してくれるらしいが、何故かxsl:attributeの属性値として使用すると実体参照がそのまま残ってしまう。
# xsl:attributeの外で使用すると普通に変換(&amp;→&)される。
仕方ないので、↓こんな感じで変換することにした。

<xsl:text disable-output-escaping=”yes”><img src=”</xsl:text>
<xsl:value-of select=”ImageUrlSmall” disable-output-escaping=”yes”/>
<xsl:text disable-output-escaping=”yes”>”&gt;</xsl:text>

これで、正しく「&amp;」と変換され画像表示ができるようになった。