更新改寫問題以澄清混淆。
XSLT - 生產地址標籤
我正在使用XSLT和XSL:由Apache FOP翻譯的FO。我想打印地址標籤。
INPUT
<?xml version="1.0" encoding="utf-8" ?>
<workOrders>
<workOrder>
<number>111</number>
<PartNumber>110022</PartNumber>
<col3>222</col3>
<Qty>333</Qty>
</workOrder>
<workOrder>
<number>111</number>
<PartNumber>110022</PartNumber>
<col3>222</col3>
<Qty>333</Qty>
</workOrder>
<!--Manually copy/paste the workOrder until you have 47 of them..-->
</workOrders>
OUTPUT
第1頁(整頁6行×3個COLS)
頁2是相同第1
頁3(部分頁面...在這種情況下4行x 3列和l AST項目空白)
UPDATE2
我插上亞歷杭德羅的解決方案。我得到說
XSL被Apache FOP報告錯誤:模板是不是在這個位置允許在樣式表
下面是來自HTML的東西到XSL轉換的代碼:FO。錯誤點由評論標記。我搞砸了什麼?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<!-- layout for the first page -->
<fo:simple-page-master master-name="first"
page-height="11in"
page-width="8.5in"
margin-top="1cm"
margin-bottom="1cm"
margin-left="1cm"
margin-right="1cm">
<fo:region-body margin-top="0cm"/>
<fo:region-before extent="1cm"/>
<fo:region-after extent="0cm"/>
</fo:simple-page-master>
<!-- layout for the other pages -->
<fo:simple-page-master master-name="rest"
page-height="11in"
page-width="8.5in"
margin-top="1cm"
margin-bottom="1cm"
margin-left="1cm"
margin-right="1cm">
<fo:region-body margin-top="0cm"/>
<fo:region-before extent="1cm"/>
<fo:region-after extent="0cm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="basicPSM" >
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference master-reference="first" page-position="first" />
<fo:conditional-page-master-reference master-reference="rest" page-position="rest" />
<!-- recommended fallback procedure -->
<fo:conditional-page-master-reference master-reference="rest" />
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
<!-- end: defines page layout -->
<!-- actual layout -->
<fo:page-sequence master-reference="basicPSM">
<fo:flow flow-name="xsl-region-body">
<xsl:template match="/" name="tables"><!--ERROR REFERS TO HERE-->
<xsl:param name="pRows" select="3"/>
<xsl:param name="pColumns" select="3"/>
<xsl:param name="pSequence" select="*/*"/>
<xsl:variable name="vSize" select="$pRows * $pColumns"/>
<xsl:for-each select="$pSequence[position() mod $vSize = 1]">
<xsl:variable name="vPosition" select="position()"/>
<fo:table table-layout="fixed" width="63mm" border-collapse="separate" wrap-option="wrap">
<fo:table-body wrap-option="wrap">
<xsl:call-template name="rows">
<xsl:with-param name="pSequence"
select="$pSequence[
position() > ($vPosition - 1) * $vSize
and
$vPosition * $vSize + 1 > position()
]"/>
</xsl:call-template>
</fo:table-body>
</fo:table>
</xsl:for-each>
</xsl:template>
<xsl:template name="rows">
<xsl:param name="pSequence" select="/.."/>
<xsl:param name="pRow" select="$pRows"/>
<xsl:if test="$pRow">
<xsl:call-template name="rows">
<xsl:with-param name="pSequence" select="$pSequence"/>
<xsl:with-param name="pRow" select="$pRow - 1"/>
</xsl:call-template>
<fo:table-row wrap-option="wrap">
<xsl:call-template name="columns">
<xsl:with-param name="pSequence"
select="$pSequence[
position() > ($pRow - 1) * $pColumns
and
$pRow * $pColumns + 1 > position()
]"/>
</xsl:call-template>
</fo:table-row>
</xsl:if>
</xsl:template>
<xsl:template name="columns">
<xsl:param name="pSequence" select="/.."/>
<xsl:param name="pColumn" select="$pColumns"/>
<xsl:if test="$pColumn">
<xsl:call-template name="columns">
<xsl:with-param name="pSequence" select="$pSequence"/>
<xsl:with-param name="pColumn" select="$pColumn - 1"/>
</xsl:call-template>
<fo:table-cell width="90mm">
<fo:block wrap-option="wrap">
<xsl:apply-templates select="$pSequence[$pColumn]"/>
</fo:block>
</fo:table-cell>
</xsl:if>
</xsl:template>
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:call-template name="tables">
<xsl:with-param name="pSequence" select="workOrders/workOrder[position()!=1]"/>
</xsl:call-template>
</xsl:template>
<xsl:template match="workOrder">
<xsl:value-of select="PartNumber"/>
</xsl:template>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:stylesheet>
「的困難的部分是確保他們排列在彼此旁邊列「。 - 這個要求不清楚。這是否意味着困難的部分是將它們分成幾排?哪些細胞應該與哪些細胞排列在一起? – LarsH
你還使用XSLT 2還是必須使用1? 2.0會使這更容易。 – LarsH
@ P.Brian.Mackey:這些表格問題有很多答案。您需要提供減少但有意義的輸入樣本和確切的期望輸出。 – 2011-05-03 22:48:06