0

皆さん、

コンテンツ テンプレートに子データまたは生データ (複雑なタイプまたは単純なタイプ) がある場合にのみタグをレンダリングする方法はありますか?

XML データが次のようになっているとします。

データ

<Root>
   <Data>stringdata</Data>
</Root>

私のXSLTは次のようになります。

XSLT

<xsl:template match="/Root">
  <xsl:element name="Empty">
    <xsl:choose>
      <xsl:when test="Data = 'stringdata'">
        <xsl:value-of select="Data"/>
      </xsl:when>
    </xsl:choose>
  </xsl:element>
</xsl:template>

に「stringdata」が含まれていない場合は、という名前の空の要素が表示されます。choose または if ステートメントでラップするか、最初の変換で生成されたデータを含む要素のみに一致するように 2 番目の変換を設計する以外に、生成されないようにするにはどうすればよいでしょうか?

4

2 に答える 2

3

何かが足りない場合を除いて、テンプレートの条件を確認するだけでこれを行うことができます

<xsl:template match="Root[Data = 'stringdata']">
   <!-- Output Empty Element -->
<xsl:template>

一致せず、何もしないルート要素を一致させるための2番目のテンプレートも必要になります

<xsl:template match="Root" />

より具体的なテンプレートが常に優先されることに注意してください。

これが完全なXSLTです

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="Root[Data = 'stringdata']">
      <Empty>
         <xsl:value-of select="Data"/>
      </Empty>
   </xsl:template>

   <xsl:template match="Root"/>
</xsl:stylesheet>

XMLに適用すると、次のように出力されます

<Empty>stringdata</Empty>

テキストを他のものに変更すると、何も出力されません。

于 2012-04-25T19:54:29.143 に答える
0

あなたが言った上記のコメントに基づいて:

このデータ:<Root> <Data>stringdata</Data> </Root>生成する: [なし] と、このデータ:<Root> <Data>NOTstringdata</Data> </Root>生成する:コンテンツがない場合は生成されないようにし<Empty>NOTstringdata</Empty>たい。<Empty>

私はこれがあなたが望むものを達成すると信じています:

<xsl:template match="/Root">
  <xsl:choose>
      <xsl:when test="not(Data='')">
        <!-- Data is not null, now we look to see what sort of Data is there-->
        <xsl:choose>
            <xsl:when test="Data = 'stringdata'">
                <!--nothing-->
            </xsl:when>
            <xsl:otherwise>
                <!--ie. have notstringdata-->
                <xsl:element name="Empty">
                    <xsl:value-of select="Data"/>
                </xsl:element>
            </xsl:otherwise>
        </xsl:choose>

      </xsl:when>
    <xsl:otherwise>
        <!--no Data, so no element created, or you could do something specific for this scenario-->
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

ただし、要素名に「Empty」という名前を使用すると、予想される使用方法を考えると少し混乱することを言わなければなりません。

于 2012-04-25T19:48:49.850 に答える