2010-12-07 21 views
1

複雑な要素の配列/リストを含むXML文書があります。私は各複合要素が新しいページに表示されるようにPDFファイルを生成したいと思います。私はそれを1つのページのために働いている。私のサンプルXMLのようなある:Apache FOP:xml配列リストの複数ページからのPDFの反復

<root> <list><x><1>10</1><2>20</2></x> <x><1>11</1><2>22</2></x> <x><1>13</1><2>23</2></x></list> </root> 

私は、検証エラーを取得しています

<xsl:for-each select="list/x"> 
<fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
<fo:flow flow-name="xsl-region-body"> 
<fo:block> 
     ... my fo:table etc here 
     </fo:block> 
     <fo:block id="SV_RefID_PageTotal" /> 
</fo:page-sequence> 
</xsl:for-each> 

の周りに次のことを試してみました。何が間違っているのですか?そのようなことをするより良い方法はありますか? ありがとう

+0

あなたのエラーを記入してください。 –

+0

検証エラーとは何ですか?あなたのサンプルXMLがうまく構成されていないため、xsl-fo検証エラーですか?それともエラーですか? –

答えて

0

まだ投稿されていないので、あなたのXMLがうまく構成されていないためにエラーが発生していると思います。要素名は数字で始めることはできません。 (XML Elementsの "XML命名規則"を参照)

また、有効なXSL-FOを生成するクイックXSLスタイルシートも作成しました。おそらくあなたが望むものではないかもしれませんが、おそらくあなたはそれから1つまたは2つを使うことができますか?

修正されたサンプルのXML

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <list> 
    <x> 
     <c1>10</c1> 
     <c2>20</c2> 
    </x> 
    <x> 
     <c1>11</c1> 
     <c2>22</c2> 
    </x> 
    <x> 
     <c1>13</c1> 
     <c2>23</c2> 
    </x> 
    </list> 
</root> 

XSLスタイルシート

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.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:choose> 
     <xsl:when test="name() = 'root'"> 
     <xsl:apply-templates/> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy>   
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

    <xsl:template match="list"> 
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     <fo:layout-master-set> 
     <fo:simple-page-master master-name="my-page"> 
      <fo:region-body/> 
     </fo:simple-page-master> 
     </fo:layout-master-set> 
     <xsl:apply-templates/> 
    </fo:root> 
    </xsl:template> 

    <xsl:template match="x"> 
    <fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:table> 
      <fo:table-body> 
      <fo:table-row> 
       <xsl:apply-templates/> 
      </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     </fo:flow> 
    </fo:page-sequence> 
    </xsl:template> 

    <xsl:template match="c1|c2"> 
    <fo:table-cell> 
     <fo:block> 
     <xsl:apply-templates/> 
     </fo:block> 
    </fo:table-cell> 
    </xsl:template> 

</xsl:stylesheet> 

XSL-FO

<?xml version="1.0" encoding="UTF-8"?> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
     <fo:simple-page-master master-name="my-page"> 
     <fo:region-body/> 
     </fo:simple-page-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:table> 
      <fo:table-body> 
       <fo:table-row> 
        <fo:table-cell> 
        <fo:block>10</fo:block> 
        </fo:table-cell> 
        <fo:table-cell> 
        <fo:block>20</fo:block> 
        </fo:table-cell> 
       </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     </fo:flow> 
    </fo:page-sequence> 
    <fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:table> 
      <fo:table-body> 
       <fo:table-row> 
        <fo:table-cell> 
        <fo:block>11</fo:block> 
        </fo:table-cell> 
        <fo:table-cell> 
        <fo:block>22</fo:block> 
        </fo:table-cell> 
       </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     </fo:flow> 
    </fo:page-sequence> 
    <fo:page-sequence master-reference="my-page" initial-page-number="auto" format="1"> 
     <fo:flow flow-name="xsl-region-body"> 
     <fo:table> 
      <fo:table-body> 
       <fo:table-row> 
        <fo:table-cell> 
        <fo:block>13</fo:block> 
        </fo:table-cell> 
        <fo:table-cell> 
        <fo:block>23</fo:block> 
        </fo:table-cell> 
       </fo:table-row> 
      </fo:table-body> 
     </fo:table> 
     </fo:flow> 
    </fo:page-sequence> 
</fo:root> 
+0

私の投稿で間違ったxmlを形成したのは間違いでしたが、実際のシナリオではそうではありません。私のXMLは整形式であり、投稿するには大きすぎます。私が見ている問題は、私のXMLが生成され、foを生成するためにxsl変換を行うと、いくつかの要素が失われ、空のテーブル本体が作成されるということです。そして、それは私が検証例外を得るところです。 – pable

+0

私はあなたの応答に非常に感謝し、同じ日に返事を得ることをうれしく思います。あなたは素晴らしいです。 – pable

+0

誰かがapache fopでリストを反復するための例に私をリダイレクトできますか? –

関連する問題