2012-02-25 19 views
6

私はxsl-foへのxslt変換をしたいが、私はこれを行うことができるとは確信していない。 XMLリストをxsl-foリストに変換しようとしています。誰かがどこに私が長い時間のグーグルグーグルを探してどこにこれの多くの例aren't見つけることができることを教えてもらえますか?私のXMLはこれに似ています。xsltからxsl-foへの変換

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

私は、この変換のために使用テンプレートを試してみたが、私のテンプレートは、テンプレートは、この変換で作業する場合XSL-FOは、誰もが私に言うことができます得るために動作しません。彼らがうまくいけば私は誰も見つけることができない例を示すことができます。私objetiveは(PDF聖霊降臨祭のFOPに

おかげ


これは私がHTMLソースの一部をrecived私のXML文書の一部であり、私は今、私はXMLを変換しようとXMLにHTMLを変更を取得している聖霊降臨祭Aリスト)をXSL-FOにXSLTします。私の問題は、私はこの変換にテンプレートを付けることができないということです。私の最後のobjetiveは、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は、XSL-FOへの100%変換を持っていません。 – 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が現れます。

スタイルFO 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> 

XSLFO構文の確認http://www.w3schools.com/xslfo/default.asp

fopを実行する方法については、http://xmlgraphics.apache.org/fop/trunk/running.htmlを参照してください。 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) 

(同様にコマンドラインから)