2015-03-30 3 views
0

Я tring, чтобы преобразовать xsl:fo в xslt (для вывода HTML). Затем я применил бы xslt вместо xsl:fo, получая выход HTML вместо PDF.Получение html xslt из xsl: fo

Как это сделать?

Мне нужен API для обработки XML или JAXP, который преобразует XML и XSL в другой вывод. Итак, я попытался написать шаблон XSLT:

<xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo" 
> 

<xsl:template match="/xsl:template[@match='/root']/fo:root"> 
<xsl:apply-templates select="fo:page-sequence"/> 
</xsl:template> 

<xsl:template match="fo:page-sequence"> 

<xsl:for-each select="fo:flow[@flow-name='xsl-region-body']"> 
    <xsl:call-template name="xsl-regional-body"> 
      <xsl:with-param name="fontsize"><xsl:value-of select="@font-size"/></xsl:with-param> 
     </xsl:call-template> 
    </xsl:for-each> 
</xsl:template> 

<xsl:template name="xsl-regional-body"> 
    <xsl:param name="fontsize" /> 
    <body>  
     <xsl:if test="$fontsize"> <!-- costruisce <font size=""> --> 
      <font> 
      <xsl:attribute name="size"> 
       <xsl:value-of select="$fontsize"/> 
      </xsl:attribute> 
      </font> 
     </xsl:if> 
     <xsl:for-each select="*/xsl:choose"> 
       <xsl:call-template name="xsl-choose"/> 
     </xsl:for-each> 
     <xsl:apply-templates select="."/> 
    </body> 
</xsl:template> 

<xsl:template name="xsl-choose"> 
    <xsl:value-of select="."/> 
</xsl:template> 

я получить что-то вроде

 <body><font size="10pt"/> 
     ... 
     text words.. 
     </body> 

Но удалить все XSL: выбрать XSL: когда и другие теги, как мне все эти теги, потому что мне нужно передать данные xml во втором проходе с использованием Jaxp и произвести html .. Я бы получил

 <body><font size="10pt"/> 
     <xsl:choose> 
     <xsl:when test="ddx[@id='LET.....> 
      <xsl::value-of select="ddx[@id='Lx']/r/PE...> 
     </xsl:when>.. 
     </xsl:choose> 
     text words.. 
     </body> 

Как получить узлы XSL, такие как текстовый узел?

+0

Просто чтобы быть ясно ... Я считаю, что вы пытаетесь создать XSL, который будет преобразовывать XSL, предназначенный для создания XSL FO в XSL, который будет создать HTML, правильно? Вы хотите отобразить все конструкции, такие как fo: block to p и fo: table to table и т. Д.? –

+0

У вас нет доступа к XML, который использовался как вход для преобразования FO? Если вы это сделаете, это станет более простой отправной точкой. – Hobbes

ответ

1

Если вы хотите использовать XSLT для вывода элементов XSLT (т.е. элементы в пространстве имен XSLT), то вам нужно использовать псевдоним пространства имен, как показано в http://www.w3.org/TR/xslt#literal-result-element:

<xsl:stylesheet 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"> 

<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/> 

<xsl:template match="/"> 
    <axsl:stylesheet> 
    <xsl:apply-templates/> 
    </axsl:stylesheet> 
</xsl:template> 

<xsl:template match="block"> 
    <axsl:template match="{.}"> 
    <fo:block><axsl:apply-templates/></fo:block> 
    </axsl:template> 
</xsl:template> 

</xsl:stylesheet> 
0

я поставил XSL: код между <! CDATA [...]]>

в любом случае, используя другое пространство имен