Подтвердить что ты не робот

Как не копировать некоторые атрибуты?

Мне нужно скопировать из входного документа для вывода документа всех атрибутов, кроме одного.

Мой ввод выглядит следующим образом:

<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)"/>

Как мне написать таблицу стилей для получения нужного результата?

4b9b3361

Ответ 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>