2013-07-25 5 views
0

У меня есть документ, который должен быть сгенерирован как PDF. Я использую Xalan и Apache FOP для обработки XML с XSLT в XSL-FO.Снятый HTML в XML-узле через XSLT в XSL-FO

В моем XML дереве есть узел, как это:

<root> 
    <formula> 
     <text>3+10*10^-6*l</text> 
     <html>&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;3 &middot; + 10 &middot; 10&lt;sup&gt;-6&lt;/sup&gt; · &lt;i&gt;l&lt;/i&gt;&lt;/html&gt;</html> 
    </formula>  
</root> 

Как я могу не только получить надлежащее HTML (с помощью disable-output-escaping="yes"), но и получить набор узлов (exsl:node-set?), Что я могу обрабатывать позже? Я имею в виду, я хочу получить представление XSL-FO этой формулы HTML, чтобы интегрировать это в мой PDF-выход.

Что-то вроде

<xsl:template match="xhtml:b"> 
    <fo:inline font-weight="bold"><xsl:apply-templates/></fo:inline> 
</xsl:template> 

Там может быть решение с использованием saxon:parse(). Однако я не могу переключиться на это с Xalan-J.

Есть ли решение в моем сценарии?

ответ

1

Можно, конечно, написать одну таблицу стилей для обработки с Xalan, что делает

<xsl:template match="html"> 
    <xsl:value-of select="." disable-output-escaping="yes"/> 
</xsl:template> 

, который затем создает упорядоченный результирующий документ с разметкой XHTML.

Вторая таблица стилей затем может обрабатывать результирующий документ первой таблицы стилей, например.

<xsl:template match="xhtml:html" xmlns:xhtml="http://www.w3.org/1999/xhtml"> 
    <xsl:apply-templates/> 
</xsl:template> 

Но вы не можете сделать это в течение одной таблицы стилей с фрагментом результирующего дерева, как самку (отключить-выход-побег) является функцией сериализации и если вы работаете с результирующих фрагментов дерева преобразуется в набор узлов с помощью exsl:node-set или аналогичных в пределах одной таблицы стилей не происходит сериализация.

Похоже, что ваш фрагмент, по-видимому, содержит ссылки на необъявленные объекты, такие как &middot; Я думаю, что образец не анализируется как XML вообще, поэтому вам нужно будет исправить это, прежде всего, для любой обработки XSLT.