xslt - 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>
解决方案
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
如果您有多种颜色选择,则可以将其替换为。
推荐阅读
- android - 无法在 Android Studio 上接受 sdk 许可证
- python - UnicodeEncodeError:“ascii”编解码器无法在打印函数中编码字符
- jquery - Fancybox 不能很好地与里面的表格一起工作
- python - 如何从图像中分离出手写数字候选者?
- linux - 从 datetime.now 经过 15 分钟的时间
- c++ - C ++通过另一个链接一个库
- php - 无法使用 phpmailer 在邮件中发送令牌和电子邮件值以忘记密码
- java - ObjectMapper 无法处理带有遗留枚举(类)的映射对象
- javascript - 在javascript中打印集合容器的特定元素
- highcharts - Highcharts/Highstock 跑圈