저는 xsl을 처음 사용하기 때문에 이것은 분명한 대답 일 수 있습니다.XSL 테이블의 행을 별도의 페이지 시퀀스로 분리 할 수 있습니까?
xml에서 테이블을 만들고 FOP를 사용하여 java에서 xsl 스타일 시트를 만듭니다. 테이블에는 수천 개의 행 (> 50,000)이있을 수 있으므로 Java 힙 공간을 사용하지 않도록 FOP의 메모리 사용 공간을 줄이려고합니다.
지금 내 xsl은 전체 <fo:table-body
> 요소를 단일 페이지 시퀀스로 그룹화하므로 테이블의 행을 생성하는 동안 메모리가 재활용되지 않습니다. 어떻게 든 개인 또는 행 그룹을 별도의 페이지 시퀀스로 나눌 수 있습니까? 요소는 <fo:table
> 요소의 법적 내부에>,하지만 난 <fo:page-sequence
생각하지 않는다 :
가 나는 인덱스로 요소를 반복 할 수 있습니다 알고 (Xslt - iterate nodes in chunks이 유래 응답 참조).
테이블 내에서 행을 분해 할 수없는 경우 행을 개별 테이블로 분리 할 수있는 방법이 있습니까?
편집 : 나는 제안에서이 함께 왔어요
입력 XML :
이<?xml version="1.0" encoding="UTF-8"?>
<table title="sample">
<headers>
<column>title1</column>
<column>title2</column>
<column>title3</column>
<column>title4</column>
<column>title5</column>
<column>title6</column>
</headers>
<row>
<column>0</column>
<column>ABC</column>
<column>0</column>
<column>Claim Appeal</column>
<column>asldkjf98aet24</column>
<column>897123947623</column>
</row>
<row>
...
</row>
...
</table>
입력 XSL :이
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
<xsl:output method="xml" version="1.0" omit-xml-declaration="no"
indent="yes"/>
<xsl:template match="table">
<xsl:variable name="startRow" select="0"/>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simpleA4" page-height="29.7cm"
page-width="22cm" margin-top="2cm" margin-bottom="2cm"
margin-left="1.5cm" margin-right="1.5cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<xsl:param name="startRow"/>
<fo:page-sequence>
<fo:table>
<xsl:if test="$startRow = 0">
<fo:table-header>
<fo:table-row font-weight="bold">
<xsl:apply-templates select="headers"/>
</fo:table-row>
</fo:table-header>
</xsl:if>
<xsl:foreach select="row[position() > $startRow &&
position() < 54]">
<!-- call row rendering template -->
<fo:table-body>
<xsl:apply-templates select="row"/>
</fo:table-body>
</xsl:foreach>
</fo:table>
</fo:page-sequence>
</fo:root>
<xsl:if test="$startRow < 100000">
<xsl:apply-templates select=".">
<xsl:with-param name="startRow" select="$startRow + 54"/>
</xsl:apply-templates>
</xsl:if>
<xsl:template match="headers">
<xsl:for-each select="column">
<fo:table-cell>
<fo:block>
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:for-each>
</xsl:template>
<xsl:template match="row">
<fo:table-row>
<xsl:for-each select="column">
<fo:table-cell>
<fo:block>
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:for-each>
</fo:table-row>
</xsl:template>
</xsl:template>
</xsl:stylesheet>
, 내가 <page-sequence
에 오류가 > 태그에 대한 마스터 참조,하지만 난 마스터 참조 = "simpleA4"아무 소용이 시도했다. 뭐라 구요?
구문 오류 외에 다른 문제는 무엇입니까?
이것이 어떻게 달성 될 수 있는지에 대한 작은 예를 제공 할 수 있습니까? 나는 그들 안에있는 테이블과 함께 루프를 설정하는 물류에 대한 핸들을 얻을 수없는 것 같습니다. 편집 : 고마워요, 이제 xslt의 구문을 이해하여 선택 의사 코드를 작동 순서로 가져와야합니다. – pclem12
@ pclem12 불행하게도 믿을만한 도구가 빠졌지 만 내가 할 수있는 것을 보게 될 것이다. – biziclop
고마워, 나는 xsl을 가진 완전한 초심자이다, 그래서 내가 통풍 관에 느린 경우에 저를 용서하십시오 – pclem12