11

を使用してデフォルト値を設定することは可能<xsl:value-of>ですか? XSLT スタイルシートを使用して JSON 出力を生成しようとしていますが、処理段階で特定のフィールドが使用できない場合があります。これにより、JSON ドキュメントの有効性を損なう null 値が残ります。理想的には、使用できない場合はデフォルト値を設定できると思います。したがって、次の場合:

    "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]"/>

説明

シーケンスを構築する 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 に答える