Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XSLT中嵌入带标记的静态CDATA_Xslt_Cdata - Fatal编程技术网

在XSLT中嵌入带标记的静态CDATA

在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"/> <!-- ============================

我需要从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"/>
<!-- ================================================== -->
  <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>
&lt;b&gt;static&lt;/b&gt;
&lt;br/&gt;&lt;br/&gt;
text
&lt;br/&gt;&lt;br/&gt;
  </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只是一种输入便利,更像是在属性周围选择单引号或双引号,而不是传递重要信息的方式。