Java,CData和多个xslt转换

时间:2011-09-15 09:06:34

标签: java xslt transform

我在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>]]&gt;</answer></td>
...

问题是CDATA已更改为从步骤 C D 的文本数据。输出方法必须为 xhtml

1 个答案:

答案 0 :(得分:0)

如果您的XSLT结果被XSLT处理器序列化为XML,并且您希望将某些元素的内容序列化为CDATA部分,那么您需要在xsl:output指令http://www.w3.org/TR/xslt20/#serialization中告知处理器例如

<xsl:output cdata-section-elements="answer"/>

但是,正如我所说,这是一个序列化功能,您的描述听起来有点像您的转换创建节点而不是序列化它们。