1

次の XSLT があるとします。

<xsl:template match="DTS:Executable[@DTS:ExecutableType='SSIS.Package.2' or @DTS:ExecutableType='MSDTS.Package.1']">
    <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates select="./DTS:Property"/>
        <xsl:apply-templates select="./DTS:ConnectionManager"/>
        <xsl:apply-templates select="./DTS:Configuration"/>
        <xsl:apply-templates select="./DTS:LogProvider"/>
    </xsl:copy>
</xsl:template>

DTS:Variable などの他のノード タイプがある場合、それらは apply-templates ステートメントで選択されないため、生成された XML から除外されることを認識しています。

私の質問は、前の apply-templates ステートメントで指定されていないすべての要素を選択する apply-templates ステートメントでコピーを終了するにはどうすればよいですか?

私は次のようなことを試しました:

    <xsl:apply-templates select="./node()[name!='DTS:Property' and name!='DTS:ConnectionManager' and name!='DTS:Configuration' and name!='LogProvider']" /> 

しかし、それはうまくいかないようです。

4

1 に答える 1

2

name()式だけでなく、関数を使用する必要がありnameます。また、./ここでは不要なので、これを書くだけでよいことに注意してください.....

<xsl:apply-templates select="node()[name()!='DTS:Property' and name()!='DTS:ConnectionManager' and name()!='DTS:Configuration' and name()!='LogProvider']" />

または、次のように書くと短くなる可能性があります

<xsl:apply-templates select="node()[not(self::DTS:Property|self::DTS:ConnectionManager|self::DTS:Configuration|self::LogProvider)]" />
于 2012-09-06T22:05:43.997 に答える