xsl:copy-of
выполняет глубокое копирование выбранного узла, но не дает возможности изменить его.
Вы захотите использовать xsl:copy
, а затем добавить дополнительные узлы внутри. xsl:copy
просто копирует атрибуты узла и пространства имен, но не обычные атрибуты и дочерние узлы, поэтому вам нужно убедиться, что вы apply-templates
также протолкнете другие узлы. xsl:copy
не имеет @select
, оно работает на текущем узле, поэтому, где бы вы ни применяли <xsl:copy-of select="/root/Algemeen/foto/node()" />
, вам нужно будет перейти на <xsl:apply-templates select="/root/Algemeen/foto/node()" />
и переместить логику img
в шаблон.
Примерно так:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<result>
<xsl:apply-templates select="/root/Algemeen/foto/img"/>
</result>
</xsl:template>
<!--specific template match for this img -->
<xsl:template match="/root/Algemeen/foto/img">
<xsl:copy>
<xsl:attribute name="width">100</xsl:attribute>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!--Identity template copies content forward -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>