首页 > 解决方案 > XSLT - 如果语句没有在 for-each 中触发

问题描述

我想将 XML 元素的值与字符串进行比较,并根据结果分配一个变量。但是这不起作用,所以我将 if 语句设置为 1 = 1 或另一次尝试是 1 = '1',但仍然没有分配变量,我假设 if 语句没有触发。下面的代码:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="id"/>
    <xsl:template match="/">    
        <xsl:if test="mainData/info/country[@name=$id]">
        <xsl:for-each select="mainData/info/country[@name=$id]">
        <xsl:if test="1 = 1"><!--should always fire-->
            <xsl:variable name="color" select='"red"'/>
        </xsl:if>
        <div class="modal-content">
            <div class="row" id="top-content">
            <div class="col 6 top-modal">
            <div class="card card-modal">
                <div class="card-image">
                    <img alt="Country Flag"><xsl:attribute name="src"><xsl:value-of select="flag" /></xsl:attribute></img>
                </div>
                <div class="card-content">
                    <span class="card-title"><xsl:value-of select="@name"/></span>
                </div>
            </div>
            </div>
            <div class="col 6 top-modal">
            <div class="card card-modal">
                <div class="card-panel blue accent-3 modal-card-info">
                    <span class="white-text">
            <h6>Region: <xsl:value-of select="facts/Region"/></h6>
            <h6>Code: <xsl:value-of select="facts/Abbreviation"/></h6>
            <h6>Capital: <xsl:value-of select="facts/Capital"/></h6>
            <h6>Languages: <xsl:value-of select="facts/Language"/></h6>
            <h6>Population: <xsl:value-of select="facts/Population"/></h6>
            <h6>Currency: <xsl:value-of select="facts/Currency"/></h6>
            <h6>All Games:</h6>
            <h6>Golds: <xsl:value-of select="medals/gold"/></h6>
            <h6>Silvers: <xsl:value-of select="medals/silver"/></h6>
            <h6>Bronze: <xsl:value-of select="medals/bronze"/></h6>
            <h6>Bronze: <xsl:value-of select="$color"/></h6><!-- check the var-->
                    </span>
                </div>
            </div>
            </div>
            </div>    
        <div class="row">
            <div class="col 10">
            <div class="card-panel blue accent-3">
                <span class="white-text"><xsl:value-of select="description"/></span>
            </div>
            </div>
        </div>
        </div>
         <div class="modal-footer">
        <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
        </div>
        </xsl:for-each> 
        </xsl:if>
        <xsl:if test="not(mainData/info/country[@name=$id])">
        <div class="modal-content">
        <div class="row">
            <div class="col 10 no-data">
            <div class="card-panel center-align grey darken-3">
                <span class="white-text center-align ">No Data Available</span>
            </div>
            </div>
        </div>
        </div>
        <div class="modal-footer">
        <a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat">Close</a>
        </div>
        </xsl:if>   
    </xsl:template>
</xsl:stylesheet>

标签: xslt

解决方案


xsl:if正在开火。你的问题是变量的范围。

<xsl:if test="1 = 1"><!--should always fire-->
    <xsl:variable name="color" select='"red"'/>
</xsl:if>

color变量将仅作用于 的主体xsl:if,而不是其他任何地方,因此您不能在其他地方使用它。

解决办法就是改成这个,把条件放到变量声明里面

<xsl:variable name="color">
    <xsl:if test="1 = 1">
        <xsl:text>red</xsl:text>
    </xsl:if>
</xsl:variable>

xsl:choose如果您有多种颜色选择,则可以将其替换为。


推荐阅读