Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xslt XSL:使用动态选择列表生成过滤列表_Xslt_Recursion_Drop Down Menu - Fatal编程技术网

Xslt XSL:使用动态选择列表生成过滤列表

Xslt XSL:使用动态选择列表生成过滤列表,xslt,recursion,drop-down-menu,Xslt,Recursion,Drop Down Menu,我有一个包含姓名和电话号码以及与之相关的城市(可以是多个城市)的XML文件。我想做的是生成一个唯一的城市列表,然后让用户选择其中一个城市。执行此操作时,将显示与该城市关联的所有名称的列表 我可以生成唯一的城市列表。我可以生成与硬编码城市关联的名称。选择城市后,我可以使姓名/电话列表可见或不可见。我不能做的是找出如何使用select list“selected”值来过滤名称。我意识到这可能很琐碎,但请善待一个新手,告诉我是怎么做的 这是我的密码: <?xml version="1.0" en

我有一个包含姓名和电话号码以及与之相关的城市(可以是多个城市)的XML文件。我想做的是生成一个唯一的城市列表,然后让用户选择其中一个城市。执行此操作时,将显示与该城市关联的所有名称的列表

我可以生成唯一的城市列表。我可以生成与硬编码城市关联的名称。选择城市后,我可以使姓名/电话列表可见或不可见。我不能做的是找出如何使用select list“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> 

var showList=函数(){
document.getElementById(“群集”).style.visibility=“可见”;
}
选择一个城市并单击按钮以显示列表:
全部的
名称
电话

您试图基于Javascript表达式定义XSLT变量。据我所知,这是行不通的,因为XSLT是在呈现页面之前以及在执行任何Javascript之前处理的。换句话说,不能使用XSLT根据用户操作动态更改页面内容

您可以尝试将按钮更改为真实的
,并在用户点击时重新加载页面。这样,您可以将所选城市作为请求参数,并将其读入
$thisOne
变量

我本人从未在XSLT中捕获过请求参数,但希望这能帮助您:

另一种更容易(而且效率极低)的方法是将整个列表解析为不同的
块,然后使用Javascript隐藏它们并显示正确的块