2012-09-21 77 views
0

我的xslt中有一個變量,看起來像這樣。XSLT在屬性中存儲xml

<xsl:variable name="metadata"> 
    <Metadata> 
     <xsl:apply-templates select="..." /> 
    </Metadata> 
</xsl:variable> 

之後,我試圖將元數據XML添加爲一個xsl:屬性到另一個節點。我嘗試了價值,複製和它沒有工作。當使用複製時,我得到下面的錯誤。

<OtherNode> 
    <xsl:attribute name="someAttr"> 
     <!-- I tried these and neither worked --> 
     <xsl:value-of select="$metadata" /> <!-- Empty --> 
     <xsl:copy-of select="$metadata" /> <!-- Error --> 
    </xsl:attribute> 
</OtherNode> 

類型'Element'的項目不能在'Attribute'類型的節點內構建。

這是相當直接的,但由於某種原因,我認爲它會自動逃避因素。

我正在使用xslt 1.0。

任何想法?

感謝

+0

fahed,您可能會發現這個答案有用 - 它顯示瞭如何序列化任何* XML文檔作爲屬性:http://stackoverflow.com/a/11623265/36305 –

回答

0

的第一次嘗試,利用價值的,應該用小模工作(使用的xs:文本),但應該已經回到至少的應用模板值調用沒有元數據元素。你確定apply-templates select =「...」位實際上是找到並返回一些東西嗎?

這工作:

<xsl:variable name="metadata"> 
<xsl:text>&lt;Metadata></xsl:text> 
    test 
<xsl:text>&lt;/Metadata></xsl:text> 
</xsl:variable> 


<xsl:template match="some-element"> 
    <xsl:element name="some-element"> 
    <xsl:attribute name="test"><xsl:value-of select="$metadata" /></xsl:attribute> 
    </xsl:element> 
</xsl:template> 

和輸出的樣子:

<some-element test="&lt;Metadata&gt;&#xA;  test&#xA;&lt;/Metadata&gt;"> 
+0

是的,這就是我最終做的事情我看到了你的答案。我希望我不需要這樣做,但哦。謝謝! – fbhdev

+0

沒有問題,絕對不是一個「酷」的解決方案,但有時只是把它完成是最好的。完成它,然後移動到項目中的下一個問題/挑戰:) –

0

看來你已經捕獲比你的變量不僅僅是文本,而是有node()node-set。您需要更改變量以選擇您正在尋找的text()