в XSLT вставка тип CDATA


Мне нужно вставить значения нескольких элементов в один 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>

Я читал документацию, но не могу найти решение. спасибо за помощь:)

2 3

2 ответа:

Это полное и простое преобразование:

<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>

Если вам действительно нужно или вы хотите избежать разметки, используйте

<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", которые у вас уже есть.