【问题标题】:How do you test for zero records when using <xsl:for-each>?使用 <xsl:for-each> 时如何测试零记录?
【发布时间】:2009-03-04 21:12:22
【问题描述】:

我的代码生成以下 XML:

<person_app>
  <person_data>
    <person>
         ...person details here...
    </person>
  </person_data>
</person_app>

使用 XSLT,我解析人员记录如下:

<xsl:template match="/person_app/person_data">
  <xsl:for-each select="person">
      ...generate person HTML...
  </xsl:for-each>
</xsl:template>

但是,如果我收到零人,我想显示“未找到记录”(或类似内容)。当应用返回零记录时,XML 类似于以下内容:

<person_app/>

长话短说,当我使用 解析我的 Person 记录时,如何测试空结果集?我尝试了以下方法但没有成功:

<xsl:if test="not(person)">
  <div style="font-size:18pt"><xsl:text>No records found</xsl:text></div>
</xsl:if>

【问题讨论】:

  • 呃。弄清楚了。记录为零时,模板匹配失败。

标签: xslt


【解决方案1】:

类似这样的:

<xsl:choose>
  <xsl:when test="person">
    <xsl:for-each select="person">
       ...generate person HTML...
    </xsl:for-each>
  </xsl:when>
  <xsl:otherwise>
    <div style="font-size:18pt"><xsl:text>No records found</xsl:text></div>
  </xsl:otherwise>
</xsl:choose>

【讨论】:

  • 我同意。我什至把事情分解成非常简单的部分,但仍然没有。
  • 发现并修复了问题。我忘记关闭 xsl:otherwise 标记。现在绝对有效。
  • 得到了答案。它在顶部的模板匹配失败。
【解决方案2】:
<xsl:template match="/person_app/person_data">
  <xsl:if test="count(person) = 0">
    <div style="font-size:18pt"><xsl:text>No records found</xsl:text></div>
  </xsl:if>
  <xsl:for-each select="person">
      ...generate person HTML...
  </xsl:for-each>
</xsl:template>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 2010-12-10
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多