Как не копировать некоторые атрибуты?
Мне нужно скопировать из входного документа для вывода документа всех атрибутов, кроме одного.
Мой ввод выглядит следующим образом:
<mylink id="nextButton" type="next" href="javascript:;" />
И мне нужен вывод следующим образом:
<a id="nextButton" href="javascript:;" />
Если я использую следующий XSL:
<xsl:template match="mylink">
<a><xsl:copy-of select="attribute::*"/></a>
</xsl:template>
Я получаю все атрибуты для вывода следующим образом:
<a id="nextButton" type="next" href="javascript:;" />
Но я хочу игнорировать атрибут типа.
Я пробовал следующее, но ни один из них не работает так, как мне нужно:
<xsl:copy-of select="attribute::!type"/>
<xsl:copy-of select="attribute::!'type'"/>
<xsl:copy-of select="attribute::*[!type]"/>
<xsl:copy-of select="attribute::not(type)"/>
Как мне написать таблицу стилей для получения нужного результата?
Ответы
Ответ 1
Кратчайшая форма:
<xsl:template match="mylink">
<a><xsl:copy-of select="@*[name()!='type']"/></a>
</xsl:template>
Более длинный (что в первую очередь я придумал, я оставляю его для справки):
<xsl:template match="mylink">
<a>
<xsl:for-each select="@*">
<xsl:if test="name() != 'type'">
<xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>
</xsl:if>
</xsl:for-each>
</a>
</xsl:template>
Ответ 2
В XSLT 2.0:
<xsl:template match="mylink">
<a><xsl:copy-of select="@* except @type"/></a>
</xsl:template>