xsl if if带有文本或图像的条件

时间:2014-05-14 14:08:09

标签: xml xslt if-statement

我想知道如果文本匹配,如何用图像替换字符串AUD。我有这个xsl代码,不知道如何使用if条件,因为我是xsl编码的新手。

<xsl:template match="/">
    <table class="headingstable">
      <tr>
        <th class="headingstop">Title</th>
        <th class="headingstop">Country</th>
         <th class="headingstop">Date</th>

      </tr>
      <xsl:for-each select="weeklyevents/event">
    <tr>
      <td class="headingsmid"><xsl:value-of select="title"/></td>
      <td class="headingsmid"><xsl:value-of select="country"/></td>
      <td class="headingsmid"><xsl:value-of select="date"/></td>
    </tr>
    </xsl:for-each>
    </table>

</xsl:template>

国家选择可以是显示结果中的四个之一:美国,澳大利亚,英国和JP。所以我想创建一个IF条件“ if string = UK then <img src="../uk.jpg" />

我不知道该怎么做,但尝试了很多次:

<xsl:template match="country[. = 'UK']">
  <img src="../uk.jpg" />
</xsl:template>

我该怎么做呢?

更新#1,这是我的xml代码:

    <?xml version="1.0" encoding="utf-8"?>
    <weeklyevents>
        <event>
            <title>AIG Services Index</title>
            <country>AUD</country>
            <date><![CDATA[05-04-2014]]></date>
        </event>
        <event>
            <title>Bank Holiday</title>
            <country>JPY</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>MI Inflation Gauge m/m</title>
            <country>AUD</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>ANZ Job Advertisements m/m</title>
            <country>AUD</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>Building Approvals m/m</title>
            <country>AUD</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>HSBC Final Manufacturing PMI</title>
            <country>CNY</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>Bank Holiday</title>
            <country>GBP</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>Sentix Investor Confidence</title>
            <country>EUR</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>EU Economic Forecasts</title>
            <country>EUR</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>PPI m/m</title>
            <country>EUR</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>Eurogroup Meetings</title>
            <country>EUR</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>Final Services PMI</title>
            <country>USD</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>ISM Non-Manufacturing PMI</title>
            <country>USD</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>Loan Officer Survey</title>
            <country>USD</country>
            <date><![CDATA[05-05-2014]]></date>
        </event>
        <event>
            <title>Bank Holiday</title>
            <country>JPY</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
        <event>
            <title>Trade Balance</title>
            <country>AUD</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
        <event>
            <title>Cash Rate</title>
            <country>AUD</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
        <event>
            <title>RBA Rate Statement</title>
            <country>AUD</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
        <event>
            <title>Spanish Unemployment Change</title>
            <country>EUR</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
        <event>
            <title>Spanish Services PMI</title>
            <country>EUR</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
        <event>
            <title>Italian Services PMI</title>
            <country>EUR</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
        <event>
            <title>Final Services PMI</title>
            <country>EUR</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
        <event>
            <title>Services PMI</title>
            <country>GBP</country>
            <date><![CDATA[05-06-2014]]></date>
        </event>
</weeklyevents>

2 个答案:

答案 0 :(得分:2)

您可以更改

<xsl:value-of select="country"/>

通过

        <xsl:choose>
          <xsl:when test="country = 'USA'">
            <img src="../usa.jpg" />
          </xsl:when>
          <xsl:when test="country = 'UK'">
            <img src="../uk.jpg" />
          </xsl:when>
          <xsl:otherwise>
            ...
          </xsl:otherwise>
        </xsl:choose>               

答案 1 :(得分:1)

如果您希望处理包含图片代码的模板,则应将<xsl:value-of select="country"/>替换为xsl:apply-templates select="country">。有了它,您将调用为每个国家/地区定义的模板。

<xsl:template match="/">
    <table class="headingstable">
        ...
        <xsl:for-each select="weeklyevents/event">
            <tr>
                <td class="headingsmid"><xsl:value-of select="title"/></td>
                <td class="headingsmid"><xsl:apply-templates select="country"/></td>
                <td class="headingsmid"><xsl:value-of select="date"/></td>
            </tr>
        </xsl:for-each>
    </table>
</xsl:template>

因此,如果您按照建议的那样为每个国家/地区设置了模板,那么如果源文档中有<country>UK</country>,则该模板将与您的country模板匹配:

<xsl:template match="country[. = 'UK']">
  <img src="../uk.jpg" />
</xsl:template>

,生成的<td>将为:

<td class="headingsmid">
     <img src="../uk.jpg"/>
</td>

如果来源包含“不受支持”的国家/地区(您没有模板),则只会打印出文字:

<td class="headingsmid">AUS</td>

如果您可以从国家/地区代码中获取文件名,那么您可以使样式表更加简单。

如果您使用 XSLT 2.0 ,请替换所有country模板:

<xsl:template match="country">
    <img src="../{lower-case(.)}.jpg" />
</xsl:template>

如果您仅限于 XSLT 1.0 (例如,如果在浏览器中完成处理),则您不会lower-case()但可以使用此translate()

<xsl:template match="country">
    <img src="../{translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')}.jpg" />
</xsl:template>