2012-05-18 132 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来隐藏它们并显示正确的一个。