2010-08-13 2 views
2

Вот мой код:XSLT | Выбрать/Когда

<xsl:choose> 
    <xsl:when test="$all_alerts[(g:line_abbr = 'MFL') or (g:line_abbr = 'BSL') or (g:line_abbr = 'CCT') or (g:line_abbr = 'NHSL') and (g:problem != 'normal_service')]"> 
     <b>Subway</b><br /><br /> 
     <xsl:for-each select="$all_alerts[g:line_abbr = 'MFL']"> 
      <xsl:if test="g:problem != 'normal_service'"><xsl:value-of select="g:line"/> | <a href="/m/alert/mfl.html"> 
       <xsl:if test="g:problem = 'station_advisory'">Station Advisory</xsl:if> 
       <xsl:if test="g:problem = 'stop_advisory'">Stop Advisory</xsl:if> 
       <xsl:if test="g:problem = 'customer_notice'">Customer Notice</xsl:if> 
       <xsl:if test="g:problem = 'service_advisory'">Service Advisory</xsl:if> 
       <xsl:if test="g:problem = 'shuttle_bus'">Shuttle Bus</xsl:if></a><br /><br /></xsl:if> 
      <xsl:if test="g:problem = 'normal_service'"></xsl:if> 
     </xsl:for-each> 

     <xsl:for-each select="$all_alerts[g:line_abbr = 'BSL']"> 
      <xsl:if test="g:problem != 'normal_service'"><xsl:value-of select="g:line"/> | <a href="/m/alert/bsl.html"> 
       <xsl:if test="g:problem = 'station_advisory'">Station Advisory</xsl:if> 
       <xsl:if test="g:problem = 'stop_advisory'">Stop Advisory</xsl:if> 
       <xsl:if test="g:problem = 'customer_notice'">Customer Notice</xsl:if> 
       <xsl:if test="g:problem = 'service_advisory'">Service Advisory</xsl:if> 
       <xsl:if test="g:problem = 'shuttle_bus'">Shuttle Bus</xsl:if></a><br /><br /></xsl:if> 
      <xsl:if test="g:problem = 'normal_service'"></xsl:if> 
     </xsl:for-each> 

     <xsl:for-each select="$all_alerts[g:line_abbr = 'CCT']"> 
      <xsl:if test="g:problem != 'normal_service'"><xsl:value-of select="g:line"/> | <a href="/m/alert/cct.html"> 
       <xsl:if test="g:problem = 'station_advisory'">Station Advisory</xsl:if> 
       <xsl:if test="g:problem = 'stop_advisory'">Stop Advisory</xsl:if> 
       <xsl:if test="g:problem = 'customer_notice'">Customer Notice</xsl:if> 
       <xsl:if test="g:problem = 'service_advisory'">Service Advisory</xsl:if> 
       <xsl:if test="g:problem = 'shuttle_bus'">Shuttle Bus</xsl:if></a><br /><br /></xsl:if> 
      <xsl:if test="g:problem = 'normal_service'"></xsl:if> 
     </xsl:for-each>  

     <xsl:for-each select="$all_alerts[g:line_abbr = 'NHSL']"> 
      <xsl:if test="g:problem != 'normal_service'"><xsl:value-of select="g:line"/> | <a href="/m/alert/nhsl.html"> 
       <xsl:if test="g:problem = 'station_advisory'">Station Advisory</xsl:if> 
       <xsl:if test="g:problem = 'stop_advisory'">Stop Advisory</xsl:if> 
       <xsl:if test="g:problem = 'customer_notice'">Customer Notice</xsl:if> 
       <xsl:if test="g:problem = 'service_advisory'">Service Advisory</xsl:if> 
       <xsl:if test="g:problem = 'shuttle_bus'">Shuttle Bus</xsl:if></a><br /><br /></xsl:if> 
      <xsl:if test="g:problem = 'normal_service'"></xsl:if> 
     </xsl:for-each>   
    </xsl:when> 
    <xsl:otherwise></xsl:otherwise> 
</xsl:choose> 

Если есть g:line_abbr, которые имеют g:problem != 'normal service', то я хочу, чтобы название метро, ​​чтобы показать, а также следующую информацию, в противном случае я хочу ничего не показывать вообще даже заголовок метро.

Следующие объекты не скрывают заголовок «Метро», когда for-eachs пустые.

ответ

2

Я понял.

Для тех, кто заинтересован здесь, это часть, которая заставляла ее работать.

Вы должны вставить это в xsl:when заявлении

<xsl:when test="$all_alerts[((g:line_abbr = 'MFL') and (g:problem != 'normal_service')) or ((g:line_abbr = 'BSL') and (g:problem != 'normal_service')) or 
    ((g:line_abbr = 'CCT') and (g:problem != 'normal_service')) or ((g:line_abbr = 'NHSL') and (g:problem != 'normal_service'))]"> 
1

Не кажется ли вам, что это лучше, логика?

<xsl:variable name="$test_alerts" select="$all_alerts[contains('|MFL|BSL|CCT|NHSL|',concat('|',g:line_abbr,'|')]"/> 
    <xsl:if test="$test_alerts"> 
    <b>Subway</b><br /><br /> 
    <xsl:for-each select="$test_alerts"> 
     <xsl:sort select="g:line_abbr"> 
     <xsl:if test="g:problem != 'normal_service'"> 
      <xsl:value-of select="concat(g:line,' | ')"/> 
      <a href="/m/alert/{translate(g:line_abbr,'MFLBSCTNH','mflbsctnh')}.html"> 
      <xsl:call-template name="capitalize"> 
       <xsl:with-param name="string" select="g:problem"/> 
      <xsl:call-template> 
     </xsl:if> 
    </xsl:for-each> 
    </xsl:if> 
............................................ 
     <xsl:template name="capitalize"> 
      <xsl:param name="string"/> 
      <xsl:param name="norm-string" select="concat($string,'_')"/> 
       <xsl:if test="$norm-string != ''"> 
       <xsl:value-of select="concat(translate(substring($norm-string,1,1), 
                    'qwertyuiopasdfghjklzxcvbnm', 
                    'QWERTYUIOPASDFGHJKLZXCVBNM'), 
               substring(substring-before($norm-string,'_'),2), 
               ' ')"/> 
       <xsl:call-template name="capitalize"> 
        <xsl:with-param name="norm-string" 
          select="substring-after($norm-string,'_')"/> 
       <xsl:call-template> 
       </xsl:if> 
     </xsl:template> 
+0

Возможно, у меня нет времени, чтобы пройти и заменить логистику, когда у меня ее нет. Но если у меня есть время. Я попробую это. Благодаря! – balexander

+0

@ Bry4n: Это не проблема. Я добавляю этот ответ только потому, что люди, видящие ваш код, могут подумать, что XSLT является подробным, а не инструментом для них. – 2010-08-16 20:27:20

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