XSLT |Выбрать / Когда - PullRequest
       6

XSLT |Выбрать / Когда

2 голосов
/ 13 августа 2010

Вот мой код:

<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', тогда я хочу, чтобы заголовок Subway отображался вместе со следующей информацией, иначе я не хочу ничего показывать навсе, даже заголовок Метро.

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

Ответы [ 2 ]

2 голосов
/ 13 августа 2010

Я понял это.

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

Вы должны вставить это в оператор 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 голос
/ 13 августа 2010

Тебе не кажется, что это лучшая логика?

    <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...