2012-02-25 23 views
6

Quiero hacer una transformación de xslt a xsl-fo, pero no estoy seguro de poder hacer esto. Intento convertir una lista XML en una lista xsl-fo. ¿Puede alguien decirme dónde puedo buscarlo? Estoy buscando en Google por mucho tiempo. No hay muchos ejemplos de esto. Mi XML es así.Transformación de Xslt a xsl-fo

<p>TEXT</p> 
<ul> 
    <li>Item1</li> 
    <li>Item2</li> 
</ul> 
<p>ANOTHERTEXT</p> 

Intento usar plantillas para esta transformación, pero mis plantillas no funcionan para conseguir XSL-FO Puede alguien decirme si las plantillas trabajan en esta transformación. Si funcionan pueden mostrarme un ejemplo, no puedo encontrar a nadie. Mi objetivo es conseguir un FOP pdf whit

Gracias


Esto es parte de mi documento XML que recived algunas partes de la fuente en HTML y cambiar HTML a XML ahora trato de convertir XML (pizca lista) en XSL-FO con un XSLT. Mi problema es que no puedo aplicar plantillas a esta transformación. Mi objetivo final es obtener un pdf con FOP.

Gracias

ACTUALIZACIÓN

Ésta es mi XML:

<Memoria> 
    <name>TITLE</name> 
    <Index>INDEX 2010</Index> 
    <Seccion> 
    <name>INFORMATION</name> 
    <Contenido> 
     <p>TEXT</p> 
     <ul> 
    <li>ITEM1</li> 
    <li>ITEM2</li> 
     </ul> 
     <p>ANOTHER</p> 
    </Contenido> 
    </Seccion> 
</Memoria> 

Estoy probando su solución Gracias a todos

+1

HTML no tiene una traducción 100% a XSL-FO. – driis

+0

¿Cuál es el resultado exacto deseado? Por favor, edite la pregunta y proporcione. Los expertos en XSLT raramente también son xsl-fo-conocedores. –

Respuesta

6

Si usted está teniendo problemas con sus plantillas no funciona, podría ser un problema de espacio de nombres. Debe actualizar la pregunta con un ejemplo más preciso de su XML.

Aquí hay un ejemplo.

de entrada XML (fijo que estar bien formado-)

<root> 
    <p>TEXT</p> 
    <ul> 
    <li>Item1</li> 
    <li>Item2</li> 
    </ul> 
    <p>ANOTHERTEXT</p> 
</root> 

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/root"> 
    <fo:root> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in"> 
      <fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <fo:page-sequence master-reference="my-page"> 
     <fo:flow flow-name="xsl-region-body"> 
      <xsl:apply-templates/> 
     </fo:flow> 
     </fo:page-sequence> 
    </fo:root> 
    </xsl:template> 

    <xsl:template match="p"> 
    <fo:block> 
     <xsl:apply-templates/> 
    </fo:block> 
    </xsl:template> 

    <xsl:template match="ul"> 
    <fo:list-block padding="4pt"> 
     <xsl:apply-templates/> 
    </fo:list-block> 
    </xsl:template> 

    <xsl:template match="li"> 
    <fo:list-item> 
     <fo:list-item-label end-indent="label-end()"> 
     <fo:block>&#x02022;</fo:block> 
     </fo:list-item-label> 
     <fo:list-item-body start-indent="body-start()"> 
     <fo:block> 
      <xsl:apply-templates/> 
     </fo:block> 
     </fo:list-item-body> 
    </fo:list-item>  
    </xsl:template> 
</xsl:stylesheet> 

salida XSL-FO

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
     <fo:simple-page-master master-name="my-page" page-width="8.5in" page-height="11in"> 
     <fo:region-body margin="1in" margin-top="1.5in" margin-bottom="1.5in"/> 
     </fo:simple-page-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="my-page"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:block>TEXT</fo:block> 
     <fo:list-block padding="4pt"> 
      <fo:list-item> 
       <fo:list-item-label end-indent="label-end()"> 
        <fo:block>•</fo:block> 
       </fo:list-item-label> 
       <fo:list-item-body start-indent="body-start()"> 
        <fo:block>Item1</fo:block> 
       </fo:list-item-body> 
      </fo:list-item> 
      <fo:list-item> 
       <fo:list-item-label end-indent="label-end()"> 
        <fo:block>•</fo:block> 
       </fo:list-item-label> 
       <fo:list-item-body start-indent="body-start()"> 
        <fo:block>Item2</fo:block> 
       </fo:list-item-body> 
      </fo:list-item> 
     </fo:list-block> 
     <fo:block>ANOTHERTEXT</fo:block> 
     </fo:flow> 
    </fo:page-sequence> 
</fo:root> 

salida Apache FOP

enter image description here

0

En primer lugar, asegúrese de que tiene un archivo XHTML (sin < br> etcétera). A continuación, aplique una transformación xslt para crear el archivo fo, luego alimente eso a fop y emerge el pdf.

de fragmentos de XSLT fo estilo:

<xsl:template match="html:body"> 
    <fo:page-sequence master-reference="all-pages"> 
     <fo:title> 
     <xsl:value-of select="/html:html/html:head/html:title"/> 
     </fo:title> 
     <fo:static-content flow-name="page-header"> 
     <fo:block font-weight="bold" font-size="16pt" space-before.conditionality="retain" xsl:use-attribute-sets="page-header"><!-- space-before="{$page-header-margin}" --> 
      <xsl:if test="$title-print-in-header = 'true'"> 
      <xsl:value-of select="/html:html/html:head/html:title"/> 
      </xsl:if> 
     </fo:block> 
     </fo:static-content> 
    </fo:page-sequence> 
    </xsl:template> 

Comprobar http://www.w3schools.com/xslfo/default.asp para XSLFO sintaxis.

Consulte http://xmlgraphics.apache.org/fop/trunk/running.html para obtener información sobre la ejecución de fop; la descarga de fop.jar debe estar cerca.

Ejecución de VBA, por ejemplo, de la siguiente manera:

Set shell = CreateObject("WScript.Shell") 
    cmd = "java -Dfop.home=" & baseDir & " -cp " & baseDir & "build\fop.jar org.apache.fop.cli.Main -fo " & foName & " -pdf " & pdfName 
Call shell.Run(cmd, vbWindowFrame, True) 

(similar a partir de la línea de comandos)