1

名前と電話番号、およびそれらに関連付けられている都市(複数の都市の場合もあります)のXMLファイルがあります。私がやりたいのは、都市の一意のリストを生成してから、ユーザーに都市の1つを選択させることです。彼らが行うと、その都市に関連付けられているすべての名前のリストが表示されます。

都市のユニークなリストを生成できます。ハードコードされた都市に関連付けられた名前を生成できます。都市を選択すると、名前/電話リストを表示または非表示にすることができます。私ができないことは、選択リストの「選択された」値を使用して名前をフィルタリングする方法を理解することです。これはおそらく些細なことだと思いますが、初心者に親切にして、それがどのように行われたかを教えてください!

これが私のコードです:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">

<html>
<head>

  <script type="text/javascript">
    var showList = function() {
    document.getElementById("swarms").style.visibility = "visible";
    <xsl:variable name="thisOne" select="'document.allCities.select.options[document.allCities.select.selectedIndex].value'" />
    }
  </script>
</head>

<body>

    <!-- Display list of cities -->
    <div id="city_list">
    <xsl:variable name="unique-list" select="swarmlist/member/cities/city[not(.=following::city)]" />

        <form name="allCities">
        <strong>Select A City and Click the Button to Display the List: </strong> 
        <select name="select">              
            <option value="all">All</option>
            <xsl:for-each select="$unique-list">
            <xsl:sort select="."/>
            <option>
            <xsl:attribute name="value"><xsl:value-of select="."/></xsl:attribute>
            <xsl:value-of select="."/>
            </option>
            </xsl:for-each>
        </select>
      <input name="submit" type="button" value="Display" onclick="showList();" />
    </form>
    </div>
    <!-- End of City list -->

    <!-- Display list of volunteers -->
   <table border="1" id="swarms" style="visibility:hidden">
     <tr bgcolor="#9acd32">
      <th>Name</th>
      <th>Phone</th>
    </tr>

    <xsl:for-each select="swarmlist/member">
    <xsl:choose>
       <xsl:when test="cities/city = $thisOne">
    <tr>
        <td><xsl:value-of select="name"/></td>
        <td><xsl:value-of select="phone"/></td>
    </tr>
    </xsl:when>
</xsl:choose>
  </xsl:for-each>
  </table>
  <!-- End of volunteer list -->

</body>
</html>
</xsl:template>
</xsl:stylesheet> 
4

1 に答える 1

0

Javascript 式に基づいて XSLT 変数を定義しようとしています。私の知る限り、ページがレンダリングされる前、および Javascript が実行される前にXSLT が処理されるため、これは機能しません。つまり、XSLT を使用して、ユーザーのアクションに基づいてページのコンテンツを動的に変更することはできません。

ボタンを実際のボタンに変更して<input type="submit">、ユーザーがクリックしたときにページをリロードできるようにすることができます。このようにして、選択した都市をリクエスト パラメータとして取得し、それを$thisOne変数に読み込むことができます。

XSLT でリクエスト パラメータを自分でキャプチャしたことはありませんが、これが役立つことを願っています

もう 1 つの方法は、リスト全体をさまざまなブロックに解析してから<div>、Javascript を使用してそれらを非表示にし、正しいブロックを表示することです。

于 2012-05-18T23:00:38.447 に答える