2010-06-04 3 views
26

Ich habe die folgende Stück Code in meiner XSLT-Datei:Xslt wie Attribute hinzufügen zu kopieren-of

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

In der XML-Datei der Knoten /root/Algemeen/foto/ hält ein HTML-Bild, zum Beispiel: < img src = "somephoto.jpg"/>

Was ich tun möchte, ist eine feste Breite zum Bild hinzuzufügen. Aber die folgende nicht funktioniert:

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

Antwort

43

xsl:copy-of eine tiefe Kopie des ausgewählten Knotens durchführt, aber keine Gelegenheit, es zu ändern.

Sie möchten xsl:copy verwenden und dann weitere Knoten hinzufügen. xsl:copy kopiert nur die Knoten- und Namespace-Attribute, aber nicht die regulären Attribute und die untergeordneten Knoten. Daher sollten Sie sicherstellen, dass Sie auch die anderen Knoten durch apply-templates verdrängen. xsl:copy hat keine @select, es funktioniert auf dem aktuellen Knoten, also wo immer Sie die <xsl:copy-of select="/root/Algemeen/foto/node()" /> anwendeten, müssen Sie zu <xsl:apply-templates select="/root/Algemeen/foto/node()" /> wechseln und die img Logik in eine Vorlage verschieben.

Etwas wie folgt aus:

<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

arbeitete wie ein Charme. ich danke dir sehr –

Verwandte Themen