- 締切済み
/imgタグが生成される
いつもここにはお世話になっております。 XSLでHTMLを出力する際なのですが、以下のように記述するとimgタグの後に/imgタグが付いてきてしまいます。 <img> <xsl:attribute name="src"><xsl:value-of select="@gazou" /></xsl:attribute> </img> →出力結果:<img src="hoge.jpg"></img> xsl:elementでも同様の結果でした。 これを <img src="hoge.jpg" /> のように出力するにはxsl:textのdisable-output-escaping="yes"で対応するしか方法は無いのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yuu_x
- ベストアンサー率52% (106/202)
<xsl:element name="img"> <xsl:attribute name="src"><xsl:value-of select="@gazou" /></xsl:attribute> </xsl:element> としてみては
- tekebon
- ベストアンサー率62% (36/58)
環境がわからないので何とも言えませんが、一般的には以下のようになっています。 XSLTでの出力はテキスト、XML、HTMLの3種類で出力することができます。 HTMLで出力すれば<br>や<img>などは開始タグのみが出力されます。 XMLだと必ず開始タグと終了タグのペアになります。 (おそらくXML出力になっているのではないでしょうか?) <xsl:stylesheet>要素の直下に下記のように指定すると出力をHTMLに指定することができます。 <xsl:output method="html"/> ※ただし、全ての実行環境がこの指定に対応しているわけではないので ご使用の環境で出力方法のHTML指定がないか確認してみてください。 また下記のように指定するとimgタグなどをシンプルに指定できます。 「属性値テンプレート」といいます。属性値としてvalue-ofのselectに書いていたものを { }で囲んで指定するだけです。 <img src="{@gazou}"/>
補足
回答ありがとうございます。 返事が遅くなり申し訳ありません。 <xsl:output>は勿論htmlに設定してあります。 一応ソースです。テキスト文言などは都合上変更しました。 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="utf-8" indent="yes" /> <xsl:strip-space elements="*" /> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="Documents"> <xsl:text disable-output-escaping='yes'><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> </xsl:text> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>タイトル</title> <xsl:text disable-output-escaping="yes"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="css/reset.css" media="all" /> <link rel="stylesheet" type="text/css" href="css/style.css" media="all" /> </xsl:text> </head> <body> <div id="wrap"> <div id="header"> <div id="headerInner"> <h1><xsl:text disable-output-escaping='yes'><img src="img/logo.gif" alt="画像" /></xsl:text></h1> <ul> <li><a href="hoge.html">>>リセット</a></li> <li><a href="hogeout.html">>>ログアウト</a></li> </ul> </div> <p id="srName"><xsl:value-of select="$label_ja" /></p> </div> <div id="contents"> <h2 id="sectionDoc">あいうえお</h2> <table> <tr class="docHeader"> <th class="docName">書類名</th> <th class="aks">必要数</th> <th class="information">備考</th> <th class="download">DL</th> </tr> <xsl:apply-templates match="Document"/> </table> <ul id="docBtn"> <li id="printBtn"> <a target="_blink" title="印刷する"> <xsl:attribute name="href">print.html?q=<xsl:value-of select="$q" /></xsl:attribute> <xsl:text disable-output-escaping="yes"><img src="img/print.jpg" alt="印刷する" title="印刷する" /></xsl:text> </a> </li> <li id="topBtn"><a href="qa.html" title="トップに戻る"><xsl:text disable-output-escaping="yes"><img src="img/top.jpg" alt="トップに戻る" alt="トップに戻る" /></xsl:text></a></li> </ul> </div> </div> <div id="footer"> <p id="copyright">Copyright © <xsl:value-of select="$label_eng" /> All rights reserved.</p> </div> </body> </html> </xsl:template> <xsl:template match="Document"> <xsl:element name="tr"> <th><xsl:value-of select="label" disable-output-escaping="yes" /></th> <td class="download"> <xsl:value-of select="@count" /> </td> <td> <xsl:choose> <xsl:when test="comment=''"> <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text> </xsl:when> <xsl:otherwise> <xsl:value-of disable-output-escaping="yes" select="comment" /> </xsl:otherwise> </xsl:choose> </td> <td class="download"> <xsl:choose> <xsl:when test="pdf=''"> <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text> </xsl:when> <xsl:otherwise> <xsl:element name="a"> <xsl:attribute name="target">_blank</xsl:attribute> <xsl:attribute name="href">pdfs/<xsl:value-of select="$dir" />/<xsl:value-of disable-output-escaping="yes" select="pdf" /></xsl:attribute> </xsl:element> <xsl:text disable-output-escaping="yes">"><img src="img/pdf.jpg" /></a></xsl:text> </xsl:otherwise> </xsl:choose> </td> </xsl:element> </xsl:template> </xsl:stylesheet> 属性値テンプレートは初めて知りました。 是非使わせて頂きますね。
補足
質問が分かりにくくて申し訳ありません。 xsl:elementでも同じ結果だったというのはyuu_x様が書かれた内容を実行した結果という意味です。 よろしくお願いします。