в 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 ответа:
Это полное и простое преобразование:
<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,'<br/>',visa_velv_address,'<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"
, которые у вас уже есть.