2016-12-19 2 views
0

У меня есть статический список стран в xsl, который я хотел бы получить с предварительно выбранным значением. Для этого требуется выполнить итерацию по каждому узлу и выполнить простую проверку (предпочтительно, сохраняя при этом страны автономными в одном файле). Однако выполнение < xsl: копия > работает, но < xsl: for-each > на том же самом выражении нет - что происходит? Это возможно?XSLT1.0 Зацикливание по данным с самоначислением

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:isoCountry="isoCountry:country"> 
    <isoCountry:country> 
     <option value=""></option> 
     <option value="AU">Australia</option> 
     <option value="AD">Andorra</option> 
     <option value="AE">United Arab Emirates</option> 
     <option value="AF">Afghanistan</option> 
     <option value="AG">Antigua and Barbuda</option> 
    </isoCountry:country> 

    <xsl:template name="CountrySelect"> 
    <select> 

     <option> <!-- correct number of nodes, good --> 
     <xsl:value-of select="count(document('')/*/isoCountry:menu/menu/*)"/> 
     </option> 

     <xsl:copy-of select="document('')/*/isoCountry:country/option"/> <!-- this works --> 

     <xsl:for-each select="document('')/*/isoCountry:country/option"> <!-- this does not --> 
     <option><xsl:value-of select="."/></option> 
     </xsl:for-each> 

    </select> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Я не уверен, что вы хотите делать для каждого. Он выводит текстовое значение каждой «страны/опции», завернутой в элемент 'option'. Если вы хотите, чтобы копия 'option' использовала' '. – teppic

+0

эй спасибо за ответ, намерение сделать что-то вроде Onitz

+1

Как выглядит ваш желаемый результат (добавьте его в свой вопрос)? – zx485

ответ

1

Вот пример вызова вашего CountrySelect шаблона с param для создания атрибута selected, когда атрибут value подобран.

<xsl:stylesheet 
     version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:isoCountry="isoCountry:country" 
     exclude-result-prefixes="isoCountry"> 

    <xsl:output method="html"/> 

    <isoCountry:country> 
     <option value=""/> 
     <option value="AU">Australia</option> 
     <option value="AD">Andorra</option> 
     <option value="AE">United Arab Emirates</option> 
     <option value="AF">Afghanistan</option> 
     <option value="AG">Antigua and Barbuda</option> 
    </isoCountry:country> 

    <xsl:template match="/"> 
     <form> 
      <xsl:call-template name="CountrySelect"> 
       <xsl:with-param name="selected">AU</xsl:with-param> 
      </xsl:call-template> 
     </form> 
    </xsl:template> 

    <xsl:template name="CountrySelect"> 
     <xsl:param name="selected"/> 
     <select> 
      <xsl:for-each select="document('')/*/isoCountry:country/option"> 
       <xsl:element name="{name()}"> <!-- could just be name="option" --> 
        <xsl:if test="[email protected]"> 
         <xsl:attribute name="selected">true</xsl:attribute> 
        </xsl:if> 
        <xsl:copy-of select="@*"/> 
        <xsl:copy-of select="text()"/> 
       </xsl:element> 
      </xsl:for-each> 
     </select> 
    </xsl:template> 
</xsl:stylesheet> 
Смежные вопросы