XML文書の表示時にプルダウンメニューを使いたい
下記のcountry.xmlを、option.xslでXSLTを利用してHTMLに変換し、HTML上でプルダウンメニューを表現したいと考えていますがうまくいきません。どこに問題があるのでしょうか。

回答/富士ソフトABC株式会社 技術調査室
2001/2/6

 XML文書を、XSLTでHTMLに変換して、そのHTML上でプルダウンメニューを使いたい、というご質問だと理解しました。まず、読者から@ITに提供された、うまく動かない例のリストを見てみましょう。XML文書とXSLTのスタイルシートの2つがあります。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="option.xsl"?>
<countries>
  <country name="France"/>
  <country name="Germany"/>
  <country name="Israel"/>
  <country name="Japan"/>
  <country name="Poland"/>
  <country name="United States" selected="yes"/>
  <country name="Venezuela"/>
  <country name="China"/>
  <country name="Korea"/>
</countries>

<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
  <body>
    <h1>Please select a country:</h1>
    <select id="country">
      <xsl:for-each select="//country">
        <option value="{@name}">
          <xsl:if test="@selected='yes'">
            <xsl:attribute name="selected">selected</xsl:attribute>
          </xsl:if>
          <xsl:value-of select="@name"/>
        </option>
      </xsl:for-each>
    </select>
    <hr/>
  </body>
</html>
</xsl:template>
</xsl:stylesheet>

 XML文書をXSLTで変換してプルダウンメニューを表示する例は、Apache.orgのXML Projectのページにも、「Using query parameters during XSL transformation」というサンプルが掲載されています。おそらく、それと似たものをご自分の環境で動かしたいということでしょう。

 読者が提示された上記のリストを見てみましょう。XML文書の方には、データとなる国の名前が並んでいるだけですから、特に問題はないようです。デフォルト値を「United States」に設定しています。

 問題はXSLTのスタイルシートのif文の条件です。上のリストでは、"@selected='yes'"となっていますが、"@selected[.='yes']"と記述することで正しく動作するようになります。

 IE5で実行できるサンプルを示します。

 

 下記のファイルが実際に動作するサンプルファイルです。

 

「Ask XML Expert」

 



XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間