0

私のxslは

<root>
    <tests>
        <test id="222">
         <actionId>233</actionId>
        </test>
        <test id="22">
         <actionId>23333</actionId>
        </test>
    </tests>
    <confs>
        <conf id="2211"></conf>
    </confs>
</root>

    <xsl:key name="confId" 
        match="confs/conf" 
        use="@id" /
<xsl:template match="main">
Test:
<xsl:apply-templates select="tests/test" />
</xsl:template>
 <xsl:template match="tests/test">
<xsl:choose>
            <xsl:when test="actionId[.='']">
                <li>
                    <xsl:choose>
                        <xsl:when test="key('confId', @id)">
                            Used </xsl:when>
                        <xsl:otherwise> Not found</xsl:otherwise>
                    </xsl:choose>
                </li>
            </xsl:when> 
            <xsl:otherwise> <li>Not at all found</li></xsl:otherwise>
        </xsl:choose>
 </xsl:template>

現在、actionId が null ではないため、このテンプレートの一致の反復ごとに「まったく見つかりません」というメッセージが出力されます。これは、条件が実行されない場合に一度だけ出力する必要があります。

期待される出力は

  • まったく見つからない
  • tests/test テンプレートの actionId が一致しない場合に一度だけ出力されます。
  • まったく見つからない
  • テンプレートで反復されません

    4

    1 に答える 1

    0

    match="test" テンプレートがアクティブ化されるたびに、ソース ドキュメントのテスト要素、テンプレート パラメーター、またはグローバル変数を介して入手可能な情報のみを使用できます。XSLT はステートレスであるため、以前のアクティベーションに関する知識を使用することはできません。

    最初のテスト要素を他の要素とは異なる方法で処理する場合は、2 つの異なるテンプレート ルールを記述します。

    最初のテスト要素を actionId[.=''] で特別に処理したい場合は、それに一致するテンプレート ルールを記述します。

    <xsl:template match="test[actionId[.=''][1]">
    
    于 2012-04-20T11:17:34.147 に答える