Как не копировать некоторые атрибуты? - PullRequest
22 голосов
/ 23 марта 2009

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

Мой ввод такой:

<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:;" />

Но я хочу игнорировать атрибут "type". Я пробовал следующее, но ни один из них не работает так, как мне нужно:

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

Как мне написать свою таблицу стилей, чтобы получить необходимый вывод?

Ответы [ 2 ]

36 голосов
/ 23 марта 2009

Кратчайшая форма:

<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>
0 голосов
/ 28 июня 2017

В XSLT 2.0:

<xsl:template match="mylink">
  <a><xsl:copy-of select="@* except @type"/></a>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...