2012-05-18 101 views
1

我有一個名稱和電話號碼以及與其關聯的城市(可能是多個城市)的XML文件。我想要做的是生成一個唯一的城市列表,然後讓用戶選擇其中一個城市。當他們做一個與該城市相關的所有名字的列表被顯示時。XSL:使用動態選擇列表生成過濾列表

我可以生成唯一的城市列表。我可以生成與硬編碼城市相關的名稱。當城市被選中時,我可以使名稱/電話列表可見或不可見。我不能做的是弄清楚如何使用選擇列表「selected」值來過濾名稱。我意識到這可能是微不足道的,但對一個新手要好,並告訴我它是如何完成的!

這裏是我的代碼:

<?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> 

回答

0

你試圖定義基於JavaScript表達式一個XSLT變量。據我所知,這是行不通的,因爲在處理之前處理XSLT,並且在執行任何Javascript之前。換句話說,您不能使用XSLT根據用戶操作動態更改頁面的內容。

您可以嘗試將按鈕更改爲真實的<input type="submit">,並讓用戶在其上點擊時重新加載頁面。這樣,您就可以將選定的城市作爲請求參數,並且可以將其讀入您的$thisOne變量。

我從來沒有拍攝的請求參數在XSLT我自己,但我希望,這可以幫助你: querystring using xslt

另一種方法,更容易(和效率極低),將是分析整個名單分成不同的<div>塊,然後使用Javascript來隱藏它們並顯示正確的一個。