使用XSL样式表测试XML中的值是否为空

时间:2012-03-29 10:45:52

标签: xml xslt

我正在使用XSLTprocessor脚本从外部源获取数据。 现在我想测试某个值是否为空,然后返回一个空字段。 这是我现在在XSL样式表中使用的代码。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html"/>

<xsl:template match="/">

  <table border="1" style="width:600px;margin-top:20px">
    <tr>
      <th align="left" style="text-transform: uppercase; font-size: 14px; color: white;font-weight: normal;">Date</th>
      <th align="left" style="text-transform: uppercase; font-size: 14px; color: white;font-weight: normal;">Location</th>
      <th align="right" style="text-transform: uppercase; font-size: 14px; color: white;font-weight: normal;">City</th>
      <th align="right" style="text-transform: uppercase; font-size: 14px; color: white;font-weight: normal;">Country</th>
      <th align="right" style="text-transform: uppercase; font-size: 14px; color: white;font-weight: normal;">Facebook</th>
    </tr>
    <xsl:for-each select="//item">
    <tr>
      <td style="text-align:left;"><xsl:value-of select="date" /></td>
      <td style="text-align:left;color:#ccc;"><xsl:value-of select="location" /></td>
      <td style="text-align:right;"><xsl:value-of select="city "/></td>
      <td style="text-align:right;"><xsl:value-of select="country" /></td>
      <td style="text-align:right;"><a>
<xsl:attribute name="href">
<xsl:value-of select="website" />
</xsl:attribute>
<xsl:attribute name="target">new</xsl:attribute>
I'm Attending
</a></td>
    </tr>
    </xsl:for-each>
  </table>
</xsl:template> 
</xsl:stylesheet>

我想在“网站”值上有条件声明,该值返回指向Facebook事件链接的链接。但是当数据来自的系统中没有任何内容填充时,它不应该显示链接(我正在参加)

如何使用XSL测试或某种条件语句执行此操作?

2 个答案:

答案 0 :(得分:2)

  

我想对“网站”值有条件声明   返回指向Facebook事件链接的链接。但什么都没有   填写数据来自的系统,它不应该显示   链接(我正在参加)

在XSLT中执行此操作的简单而优雅的方法

<xsl:apply-templates select="website[text()]"/>

然后有这个模板

<xsl:template match="website">
  <td style="text-align:right;">
    <a href="{.}" target="new">I'm Attending</a>
  </td>
</xsl:template>

此处您无需验证website元素是否存在 - XSLT处理器可以帮助您完成此任务。通过这种方式,我们不必编写任何显式条件指令,代码简单,简短且易读。

答案 1 :(得分:1)

尝试使用链接显示:

<xsl:if test="website/text()">
    <a>
    <xsl:attribute name="href">
        <xsl:value-of select="website" />
    </xsl:attribute>
    <xsl:attribute name="target">new</xsl:attribute>
    I'm Attending
    </a>
</xsl:if>