当选择一个不可用时,XSLT设置默认值

时间:2013-09-06 19:48:36

标签: xml xslt

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

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

如果文档中没有<foo>,我可以将其设置为0吗?

3 个答案:

答案 0 :(得分:14)

XSLT / XPath 2

使用Sequence Expressions

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

说明

  

构建序列的一种方法是使用逗号运算符   评估每个操作数并连接结果   序列,依次为单个结果序列。

答案 1 :(得分:12)

这是choose

<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 test

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

或使用named template for calling

<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>

答案 2 :(得分:7)

XSLT / XPath 2.0

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

<xsl:value-of select="if (foo) then foo else 0" />