首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT | Choose/When

XSLT | Choose/When
EN

Stack Overflow用户
提问于 2010-08-13 22:33:55
回答 2查看 927关注 0票数 2

下面是我的代码:

代码语言:javascript
复制
<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:problem != 'normal service'g:line_abbr,那么我希望显示的标题地铁以及以下信息,否则我希望什么都不显示,甚至地铁的标题。

for-eachs都为空时,下面的代码不会隐藏标题“地铁”。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-13 23:05:02

我想通了。

对于那些感兴趣的人来说,这里是它工作的部分。

您必须将其粘贴到xsl:when语句中

代码语言:javascript
复制
<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'))]">
票数 2
EN

Stack Overflow用户

发布于 2010-08-14 03:40:15

你不认为这是更好的逻辑吗?

代码语言:javascript
复制
    <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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3477859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档