11

是否可以使用设置默认值<xsl:value-of>?我正在尝试使用 XSLT 样式表生成 JSON 输出,并且某些字段在处理阶段可能不可用。这会留下一个空值,这会破坏 JSON 文档的有效性。理想情况下,如果一个默认值不可用,我可以设置一个默认值。所以在以下情况下:

    "foo_count": <xsl:value-of select="count(foo)" />

如果<foo>在文档中不可用,我可以以某种方式将其设置为 0 吗?

4

3 回答 3

18

要么选择

<xsl:choose>
   <xsl:when test="foo">
     <xsl:value-of select="count(foo)" />
   </xsl:when>
   <xsl:otherwise>
     <xsl:text>0</xsl:text>
   </xsl:otherwise>
 </xsl:choose> 

或使用if 测试

<xsl:if test="foo">
  <xsl:value-of select="count(foo)" />
</xsl:if>
<xsl:if test="not(foo)">
  <xsl:text>0</xsl:text>
</xsl:if>

或使用命名模板进行调用

<xsl:template name="default">
  <xsl:param name="node"/>
  <xsl:if test="$node">
      <xsl:value-of select="count($node)" />
    </xsl:if>
    <xsl:if test="not($node)">
      <xsl:text>0</xsl:text>
  </xsl:if>
</xsl:template>

 <!-- use this in your actual translate -->
 <xsl:call-template name="default">
         <xsl:with-param name="node" select="."/>
 </xsl:call-template>
于 2013-09-06T19:56:17.847 回答
17

XSLT/XPath 2

使用序列表达式

<xsl:value-of select="(foo,0)[1]"/>

解释

构造序列的一种方法是使用逗号运算符,该运算符 评估其每个操作数并将结果序列按顺序连接到单个结果序列中。

于 2013-09-06T20:51:37.633 回答
8

XSLT/XPath 2.0

您可以在表达式上使用条件表达式 ( if…then…else)@select

<xsl:value-of select="if (foo) then foo else 0" />
于 2013-09-06T20:18:40.180 回答