2012-05-18 4 views
1

У меня есть XML-файл с именами и телефонными номерами и городами, связанными с ними (может быть несколько городов). Я хочу создать уникальный список городов, а затем позволить пользователю выбрать один из городов. Когда они отображают список всех имен, связанных с этим городом.XSL: Использование динамического списка выбора для создания отфильтрованного списка

Я могу создать уникальный список городов. Я могу сгенерировать имена, связанные с жестко запрограммированным городом. Я могу сделать имя/список телефонов видимыми или невидимыми, когда город выбран. То, что я не могу сделать, - это выяснить, как использовать выбранное значение «selected» для фильтрации имен. Я понимаю, что это, вероятно, тривиально, но будьте добры к newb и расскажите мне, как это делается!

Вот мой код:

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

Вы пытаетесь определить переменную XSLT, основываясь на выражении Javascript. Насколько мне известно, это не сработает, потому что XSLT обрабатывается до, страница отображается, и перед выполнением любого Javascript. Другими словами, вы не можете использовать XSLT для динамического изменения содержимого страницы на основе действий пользователя.

Вы можете попытаться сменить свою кнопку на реальный <input type="submit"> и позволить перезагружать страницу, когда пользователь кликнет на нее. Таким образом, вы бы выбрали выбранный город как параметр запроса, и вы могли бы прочитать его в своей переменной $thisOne.

Я никогда не захвачена параметры запроса в XSLT сам, но, надеюсь, это может помочь вам: querystring using xslt

Другой подход, гораздо проще (и крайне неэффективно) будет разобрать весь список в различных <div> блоков , а затем используйте Javascript, чтобы скрыть их и показать правильный.

Смежные вопросы