在 XSLT 2.0 当然你可以使用
<xsl:apply-templates select="@* except (@id, @name, @class)"/>
您还可以将其简化为单个应用模板:
<xsl:apply-templates select="@id, @name, @class, @* except (@id, @name, @class)"/>
如果您对重复感到不舒服,可以使用以下排序:
<xsl:apply-templates select="@*">
<xsl:sort select="f:attOrder(.)"/>
</xsl:apply-templates>
<xsl:function name="f:attOrder" as="xs:integer">
<xsl:param name="a" as="attribute()"/>
<xsl:variable name="ix" select="index-of(("id", "name", "class"), local-name($a))"/>
<xsl:sequence select="($ix, 1000)[1]"/>
</xsl:function>
或者(这个也适用于 1.0)你可以使用模式:
<xsl:apply-templates select="@id"/>
<xsl:apply-templates select="@name"/>
<xsl:apply-templates select="@componentClassID"/>
<xsl:apply-templates select="@*" mode="remainder"/>
<xsl:template match="@id|@name|@componentClassID" mode="remainder"/>