2010-06-04 4 views
26

je la pièce suivante de code dans mon fichier XSLT:xslt comment ajouter des attributs à copier-de

<xsl:copy-of select="/root/Algemeen/foto/node()" /> 

Dans le fichier XML du noeud /root/Algemeen/foto/ contient une image HTML, par exemple: < img src = "somephoto.jpg"/>

Ce que je voudrais faire est d'ajouter une largeur fixe à l'image. Mais ce qui suit ne fonctionne pas:

<xsl:copy-of select="/root/Algemeen/foto/node()"> 
    <xsl:attribute name="width">100</xsl:attribute> 
</xsl:copy-of> 

Répondre

43

xsl:copy-of effectue une copie en profondeur du nœud sélectionné, mais ne fournit pas l'occasion de le modifier.

Vous devez utiliser xsl:copy, puis ajouter des nœuds supplémentaires à l'intérieur. xsl:copy copie juste les attributs de noeud et d'espace de noms, mais pas les attributs réguliers et les noeuds enfant, donc vous voudrez vous assurer que vous pour pousser également les autres noeuds. xsl:copy n'a pas de @select, cela fonctionne sur le nœud actuel, donc partout où vous appliquiez le <xsl:copy-of select="/root/Algemeen/foto/node()" /> , vous devrez changer à <xsl:apply-templates select="/root/Algemeen/foto/node()" /> et déplacer la logique img dans un modèle.

Quelque chose comme ceci:

<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> 
+0

a fonctionné comme un charme. Merci beaucoup –

Questions connexes