2010-06-04 45 views
26

我有以下在我的XSLT文件的代碼:XSLT如何將屬性添加到複製的

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

在XML文件中的節點/root/Algemeen/foto/モHTML圖像,例如:< IMG SRC = 「somephoto.jpg」/ >

我想要做的是給圖像添加固定寬度。但下面不工作:

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

回答

43

xsl:copy-of執行所選節點的深層副本,但不提供一個機會來改變它。

您將需要使用xsl:copy,然後在其中添加其他節點。 xsl:copy只複製節點和名稱空間屬性,但不復制常規屬性和子節點,因此您需要確保apply-templates也可以推送其他節點。 xsl:copy沒有@select,它適用於當前節點,因此無論您在何處應用<xsl:copy-of select="/root/Algemeen/foto/node()" /> ,都需要更改爲​​3210並將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> 
+0

工作就像一個魅力。非常感謝 – 2010-06-04 12:32:41