2010-02-15 50 views
3

我正在使用XSLT轉換,並需要將一些數據放入CDATA部分,並且該值存在於一個變量中。如何從XSLT訪問CDATA中的變量?

查詢:如何訪問CDATA中的變量? 以下示例:

<xsl:attribute name ="attributeName"> 
<![CDATA[ 
    I need to access some variable here like 
    *<xsl:value-of select ="$AnyVarible"/>* 
]]> 
</xsl:attribute> 

如何在CDATA中使用varibale? 注意:我不能使用 - >&lt;![CDATA[<xsl:value-of select ="$AnyVarible"/>]]&gt; 在此先感謝。

+1

@Amit:屬性值中沒有CDATA。 – Tomalak 2010-02-15 17:02:38

+1

CDATA部分是一種簡化文本編輯的方式 - 它們允許您使用非轉義字符,否則您需要實體引用。 '

call AT & T

'和'

call <![CDATA [AT&T]]>

'在語義上是等價的。 CDATA部分可能不會出現在屬性值中。 (在SGML中,你可以聲明一個屬性的類型爲CDATA,它告訴處理器將標記視爲純文本; XML不具備這種能力)。您可能希望澄清您嘗試使用CDATA屬性問題實現的目標。 – iter 2010-02-15 21:38:47

回答

6

我得到了這個解決方案... FYI大家...

<xsl:text 
disable-output-escaping="yes">&lt;![CDATA[</xsl:text> 
<xsl:value-of select ="$AnyVarible"/> 
<xsl:text 
disable-output-escaping="yes">]]&gt;</xsl:text> 
+1

這種方法的問題是,您最終可能會得到無效的XML。另外,一些XSLT處理器(例如Mozilla Firefox內置的處理器)不會遵守'disable-output-escaping'屬性。 – Lucero 2010-02-15 13:00:44

+0

@Lucero:*您如何最終得到無效的XML?除非變量包含']]>'當然。 – Tomalak 2010-02-15 16:57:55

+0

@Tomalak,在這種情況下'']]>'案例。但是,我的評論更多地是針對使用'disable-output-escaping'的。 – Lucero 2010-02-16 10:58:54

2

CDATA是文本像任何其他元素的含量......

但使用你應該能夠指定哪些元素被寫成CDATA與cdata-section-elements屬性xsl:output元素。

編輯:

現在有一個有效的樣本,我想你的意思是這樣的:

<xsl:attribute name ="attributeName"> 
<![CDATA[ 
    I need to access some variable here like 
    *]]><xsl:value-of select ="$AnyVarible"/><![CDATA[* 
]]> 
</xsl:attribute> 
+0

是的...我需要從CDATA訪問變量<![CDATA []]> – Amit 2010-02-15 11:03:39

+0

'CDATA'不能包含標籤。因此,您必須**結束CDATA部分,添加標籤並啓動另一個CDATA部分。 – Lucero 2010-02-15 12:58:02

+0

@Amit:根據規範,XML處理器必須按照與處理簡單文本相同的方式處理CDATA部分。所以如果某個工具只接受CDATA內部的數據,那麼該工具就會被破壞。 – 2010-02-15 13:00:34

3

如果您想在輸出中包含CDATA部分,則應該使用xsl:output的cdata-section-elements屬性。這是元素名稱的列表。任何這樣的元素將其文本內容包裝在CDATA中。

<xsl:output cdata-section-elements ="foo" /> 

<foo> 
    <xsl:value-of select="$bar' /> 
</foo>