Вам не нужно явно выводить keyword
и копировать существующие keyword
, используя xsl:copy
.Как альтернатива ответу @ DevNull :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="keyword">
<xsl:copy>
<xsl:attribute name="type">Key Words Head First</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
... при применении к вашему входу выдает следующее:
<body>
<keyword type="Key Words Head First"><i color="blue">super</i>man</keyword>
<keyword type="Key Words Head First"><i color="blue">super</i>man</keyword>
<keyword type="Key Words Head First"><i color="blue">super</i>woman</keyword>
</body>
Из комментариев:
... что если атрибут необходимо переопределить.Например, предположим, что ключевое слово уже имеет атрибут type.
В этом случае не копируйте существующий атрибут type
:
<xsl:template match="keyword">
<xsl:copy>
<xsl:attribute name="type">Key Words Head First</xsl:attribute>
<xsl:apply-templates select="@*[not(name()='type')]|node()"/>
</xsl:copy>
</xsl:template>