Java, CData и множественные преобразования xslt - PullRequest
0 голосов
/ 15 сентября 2011

Я много читал / гуглил по 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 приводит к (распечатке ручного перемещенияof 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 голосов
/ 15 сентября 2011

Если ваш результат XSLT сериализуется в виде XML процессором XSLT, и вы хотите, чтобы содержимое определенных элементов было сериализовано как секции CDATA, то вам нужно сообщить об этом процессору в директиве xsl:output http://www.w3.org/TR/xslt20/#serialization, например:

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

Но это, как я уже сказал, функция сериализации, ваше описание звучит немного так, как будто ваше преобразование создает узлы, а не сериализует их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...