Создание html xslt из xsl:fo

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

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

Мне нужен 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>

I obtain something like

        <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, такие как текстовый узел?


person robyp7    schedule 30.03.2015    source источник
comment
Просто для ясности... Я полагаю, вы пытаетесь создать XSL, который преобразует XSL, предназначенный для создания XSL FO, в XSL, который будет создавать HTML, верно? Это означает, что вы хотите сопоставить все конструкции, такие как fo:block, с p и fo:table с таблицей и так далее?   -  person Kevin Brown    schedule 31.03.2015
comment
У вас нет доступа к XML, который использовался в качестве входных данных для преобразования FO? Если вы это сделаете, это будет более легкая отправная точка.   -  person Hobbes    schedule 02.04.2015


Ответы (2)


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

<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>
person Martin Honnen    schedule 30.03.2015

я помещаю xsl: код между ‹ ! КДАННЫЕ [... ] ] >

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

person robyp7    schedule 02.04.2015