在XSLT中嵌入带标记的静态CDATA
我需要从XSL输出嵌入XSL中的静态CDATA构造,而不是从我正在转换的XML。例如在XSLT中嵌入带标记的静态CDATA,xslt,cdata,Xslt,Cdata,我需要从XSL输出嵌入XSL中的静态CDATA构造,而不是从我正在转换的XML。例如 <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:output method="xml" indent="yes"/> <!-- ============================
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<!-- ================================================== -->
<xsl:template match="/">
<Document>
<text><![CDATA[
<b>static</b>
<br/><br/>
text
<br/><br/>
]]>
</text>
<xsl:apply-templates select="//tag"/>
</Document>
</xsl:template>
<!-- ================================================== -->
<xsl:template match="tag">
So on and so forth...
</xsl:template>
<!-- ================================================== -->
</xsl:stylesheet>
我想要这个输出
<?xml version="1.0"?>
<Document>
<text><![CDATA[
<b>static</b>
<br/><br/>
text
<br/><br/>
]]>
</text>
So on and so forth...
</Document>
但我得到的是
<?xml version="1.0"?>
<Document>
<text>
<b>static</b>
<br/><br/>
text
<br/><br/>
</text>
So on and so forth...
</Document>
我尝试了几种转义文本和实体的组合,但似乎都不起作用。使用
<xsl:output cdata-section-elements="text" />
为某些元素强制执行CDATA
在任何情况下,您当前获得的内容都相当于一个CDATA区域,您不应该为此烦恼。i、 e:如果因为视觉上的原因而困扰你,那就克服它吧。如果由于技术原因而困扰您,请修复它们。这不会改变输出。1文本元素在XSL中,而不是XML中,因此cdata节元素无效。XSL:output cdata节元素告诉处理器结果树中的哪些元素要以cdata节作为内容进行序列化,以便正常工作。当我运行带有Tomalak建议的示例样式表时,它会输出一个CDATA部分作为文本元素的内容。从命令行使用Saxon 9.3进行测试。@dacracot您的语句如果由于技术原因而困扰您,请修复它们。只是很烦人哦,很抱歉我的回答让你烦心。并不是说里面没有什么有用的东西。如果某个应用程序无法处理XML,显然,这里就是这种情况,那么修复它可能是一个好主意。这就是我要说的要点。如果XSLT处理器正在进行序列化,cdata节元素应该具有所需的效果。但是,从XSLT控制序列化始终是不可靠的,因为调用应用程序(如Oxygen)可能希望控制序列化本身。不幸的是,您正在使用的规范是一个糟糕的规范:强制要求某些内容应该在CDATA部分中是错误的,因为大家一致认为CDATA只是一种输入便利,更像是在属性周围选择单引号或双引号,而不是传递重要信息的方式。