2010-12-07 3 views
1

복잡한 요소의 배열/목록을 포함하는 XML 문서가 있습니다. 각 복잡한 요소가 새 페이지에 표시되도록 PDF 파일을 생성하고 싶습니다. 나는 그것을 하나의 페이지로 작업한다. 나는 주위Apache FOP : XML 컨테이너 목록 반복에서 여러 페이지 PDF

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

내가 무엇입니까 유효성 검사 오류 다음 시도

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

:처럼 내 샘플 XML입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 더 좋은 방법이 있습니까? 감사합니다.

+0

하여 오류를 적어주십시오. –

+0

유효성 검사 오류 란 무엇입니까? xsl-fo 유효성 검증 오류입니까 아니면 샘플 XML이 제대로 작성되지 않았기 때문에 오류입니까? –

답변

0

아직 게시되지 않았으므로 XML 형식이 올바르지 않아서 오류가 있다고 생각합니다. 요소 이름은 숫자로 시작할 수 없습니다. (XML Elements의 "XML 명명 규칙"참조)

유효한 XSL-FO를 생성하는 빠른 XSL 스타일 시트도 만들었습니다. 그것은 아마도 당신이 원하는 것이 아니지만 어쩌면 당신은 그 중 한두 가지를 사용할 수 있습니까?

수정 된 샘플 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에서 목록을 반복하는 예제로 리디렉션 할 수 있습니까? –