2012-08-25 48 views
3

我需要插入幾個元素的值轉換成一個CDATA ...這裏是我的代碼:XSLT插入CDATA

第一,我做了輸出:

<xsl:output method="xml" encoding="UTF-8" intend="yes" cdata-section-elements="embassy" /> 

這裏是元素定義:

<xsl:element name="embassy"> 
    <xsl:value-of select="Visa/visa_velv/visa_velv_name" /> 
    <xsl:element name="br" /> 
    <xsl:value-of select="Visa/visa_velv/visa_velv_address" /> 
    <xsl:element name="br" /> 
    <xsl:value-of select="Visa/visa_velv/visa_velv_city" /> 
</xsl:element> 

,這裏是我的需要壞輸出:

<embassy><![CDATA[Ambasada e Republikes se Cekise]]> 
    <br/><![CDATA[Rruga Skënderbej 10]]> 
    <br/><![CDATA[Tirana]]>    
</embassy> 

我需要這樣的輸出:

<embassy> 
    <![CDATA[Ambasada e Republikes se Cekise<br/>Rruga Skënderbej 10<br/>Tirana]]> 
</embassy> 

我讀documentation,但我不能找到解決辦法。感謝幫助:)

+1

你爲什麼認爲你需要CDATA?它通常是一種代碼異味,並且通常表明人們沒有正確使用XML API,並依靠CDATA作爲黑客來避免分析錯誤。 –

+0

我正在爲OpenCMS進行XSL轉換。元素中的每個數據都必須位於cdata元素中。我認爲這一定是因爲沒有好的文檔。 – smonty

回答

1

這一完整而簡單的改造:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes" cdata-section-elements="Embassy"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="visa_velv"> 
    <Embassy> 
     <xsl:value-of select= 
     "concat(visa_velv_name,'&lt;br/>',visa_velv_address,'&lt;br/>',visa_velv_city)"/> 
    </Embassy> 
</xsl:template> 
</xsl:stylesheet> 

當對如下因素的XML文檔應用:

<Visa> 
<visa_velv> 
    <visa_velv_name>Ambasada e Republikes se Cekise</visa_velv_name> 
    <visa_velv_address>Rruga Skënderbej 10</visa_velv_address> 
    <visa_velv_city>Tirana</visa_velv_city> 
</visa_velv> 
</Visa> 

產生通緝的結果:

<Embassy><![CDATA[Ambasada e Republikes se Cekise<br/>Rruga Skënderbej 10<br/>Tirana]]></Embassy> 
1

如果你真的需要或者想逃避的標記,然後使用

<embassy> 
    <xsl:value-of select="Visa/visa_velv/visa_velv_name" /><![CDATA[<br/>]]><xsl:value-of select="Visa/visa_velv/visa_velv_address" /><![CDATA[<br/>]]><xsl:value-of select="Visa/visa_velv/visa_velv_city" /> 
</embassy> 

當然cdata-section-elements="embassy"你已經有了和。