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