Necesito copia de documento de entrada a la de salida de documentos de todos los atributos, sino uno solo.

Mi entrada es como este:

<mylink id="nextButton" type="next" href="javascript:;" />

Y necesito una salida como esta:

<a id="nextButton" href="javascript:;" />

Si puedo usar el siguiente elemento XSL:

<xsl:template match="mylink">
    <a><xsl:copy-of select="attribute::*"/></a>
</xsl:template>

Tengo todos los atributos para una salida como esta:

<a id="nextButton" type="next" href="javascript:;" />

Pero quiero omitir el atributo «type».
He intentado lo siguiente, pero ninguno de ellos parece funcionar de la manera que necesito:

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

¿Cómo debo escribir mi hoja de estilos para recibir la salida?

InformationsquelleAutor martsraits | 2009-03-23

2 Comentarios

  1. 37

    La forma más corta:

    <xsl:template match="mylink">
        <a><xsl:copy-of select="@*[name()!='type']"/></a>
    </xsl:template>

    Más de uno (que es lo primero que se me ocurrió, lo dejo para referencia):

    <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>
    • La forma corta funcionó excelente. Gracias!
    • He utilizado el más largo para cambiar el nombre de un atributo («cambio type a class«). Existe una versión de la más corta a la que va a realizar la misma cosa?
  2. -1

    XSLT 2.0:

    <xsl:template match="mylink">
      <a><xsl:copy-of select="@* except @type"/></a>
    </xsl:template>

Dejar respuesta

Please enter your comment!
Please enter your name here