2012-02-25 1 views
6

Я хочу преобразовать xslt в xsl-fo, но я не уверен, что смогу это сделать. Я пытаюсь преобразовать список XML в список xsl-fo. Может ли кто-нибудь сказать мне, где я могу найти, что я долго занимаюсь поиском в Интернете, не так много примеров этого. Мой XML такой.Преобразование Xslt в xsl-fo

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

Я пытаюсь шаблоны использовать для этого преобразования, но мои шаблоны не работают, чтобы получить XSL-фо Может кто-нибудь сказать мне, если шаблоны работают в этой трансформации. Если они работают, может показать мне пример, я не могу найти никого. Моя Цель СССР это получить PDF-йота ФОП

Благодарности


Это часть моего XML-документа, я RECIVED некоторые части исходного текста в HTML и меняю HTML в XML Теперь я пытаюсь преобразовать XML (ничуть список) в XSL-FO с XSLT. Моя проблема в том, что я не могу придумать шаблоны для этого преобразования. Моя конечная цель - получить PDF-файл с FOP.

Благодаря

UPDATE

Это мой 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> 

Я тестирование решения Спасибо всем

+1

HTML не имеет 100% перевод на XSL-FO. – driis

+0

Каков желаемый результат? Пожалуйста, отредактируйте вопрос и предоставьте. Эксперты XSLT редко также являются xsl-fo-cognizant. –

ответ

6

Если у вас возникли проблемы с вашими шаблонами не работает, это может быть проблемой имен. Вы должны уточнить вопрос с более точным примером вашего XML.

Вот пример.

XML-вход (фиксированный быть хорошо сформирован)

<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> 

выход 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> 

Apache FOP выход

enter image description here

0

Сначала убедитесь, что у вас есть файл Xhtml (без < br> и т. д.). Затем примените xslt-преобразование для создания fo-файла, затем подайте это, чтобы fop и PDF появился.

Отрывок из XSLT Ф.О. стиля:

<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> 

Проверить http://www.w3schools.com/xslfo/default.asp для xslfo синтаксиса.

См. http://xmlgraphics.apache.org/fop/trunk/running.html для информации о работе fop; загрузка fop.jar должна быть рядом.

Запуск из VBA, например, следующим образом:

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) 

(аналогично из командной строки)

 Смежные вопросы

  • Нет связанных вопросов^_^