我在xslt和CDATA上阅读/搜索了很多内容。
我无法控制原始数据(在数据库中)。
这是我的问题,因为数据流:
A)xslt文件(由第一个转换器加载时)调用Java函数,该函数从数据库中检索和转换数据。 xslt文件的片段:
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml"
...[more xmlns]...
version="2.0" xmlns:fn="http://www.w3.org/2005/xpath-functions"
exclude-result-prefixes="#all">
<xsl:output method="xhtml" omit-xml-declaration="yes" indent="no"/>
...[some xsl:includes]...
<xsl:variable name="myVar" select="resource:getFaq('some value')" />
<xsl:template match="/">
...[some business logic]...
<xsl:template name="someTemplate">
...
<xsl:for-each select="$myVar/faq/entry">
...
<ui:cell>
<xsl:copy-of select="value/answer" />
</ui:cell>
...[a lot more stuff]...
B)数据库中的数据:
...
<answer><![CDATA[<p>Enter the...<some html tags>...needs.</p>]]></answer>
...
C) getFaq 内的第一次转换导致(从org.w3c.dom.Node手动遍历打印):
...
<answer><#cdata-section><p>Enter the...<some html tags>...needs.</p></#cdata-section></answer>
...
D)xslt文件转换结果(使用 getFaq 中的数据):
...
<ui:cell><answer><#text><p>Enter the...<some html tags>...needs.</p></#text></answer></ui:cell>
...
E)xslt文件被另一个进程转换,结果是:
...
<td class="ui-cell "><answer xmlns="" xmlns:ui="http://www.somewhere.com/ui"><![CDATA[<p>Enter the...<some html tags>...needs.</p>]]></answer></td>
...
F)浏览器(Firefox 6.0.2)显示的内容:
...
<td class="ui-cell "><answer xmlns:ui="http://www.somewhere.com/ui" xmlns=""><!--[CDATA[<p-->Enter the...<some html tags>...needs.</p>]]></answer></td>
...
问题是CDATA已更改为从步骤 C 到 D 的文本数据。输出方法必须为 xhtml
答案 0 :(得分:0)
如果您的XSLT结果被XSLT处理器序列化为XML,并且您希望将某些元素的内容序列化为CDATA部分,那么您需要在xsl:output
指令http://www.w3.org/TR/xslt20/#serialization中告知处理器例如
<xsl:output cdata-section-elements="answer"/>
但是,正如我所说,这是一个序列化功能,您的描述听起来有点像您的转换创建节点而不是序列化它们。