我面臨一個問題,試圖只爲一組相同的節點打印一行,並且找不到相同節點的類似帖子。XSLT - 從一組相同的節點打印第一個節點
我有一個包含了一組相同的節點的輸入XML文件,例如,它看起來像:
<BookDetails>
<BK ISBN="123362367127" Shelf="Y" />
<BK ISBN="123362367127" Shelf="Y" />
<BK ISBN="123362367127" Shelf="Y" />
<BK ISBN="123362367127" Shelf="Y" />
</BookDetails>
我想要的,是隻有一次打印本書的信息。我在想,解決我的問題的方法可能是muenchian分組,例如按ISBN值分組,然後從組中打印第一個分組。基於
在我的代碼看起來像這樣:
<xsl:key name="UniqueBKs" match="BK" use="@ISBN"/>
<xsl:template name="BookDetails">
<fo:table width="160mm" table-layout="fixed">
<fo:table-column column-width="80mm" column-number="1"/>
<fo:table-column column-width="80mm" column-number="2"/>
<fo:table-body>
<xsl:for-each select="BK[generate-id() = generate-id(key('UniqueBKs', @ISBN)[1])]">
<fo:table-row>
<xsl:apply-templates select="."/>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</xsl:template>
和:
<xsl:template match="BK">
<fo:table-cell>
<fo:block font-family="arial" font-size="8pt" text-align="left">
<xsl:text>ISBN:</xsl:text>
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-family="arial" font-size="8pt" text-align="right">
<xsl:value-of select="@ISBN"/>
</fo:block>
</fo:table-cell>
</xsl:template>
如果我輸入XML文件只包含從一個BK元素的代碼工作正常。如果我有多個如上所示的Apache FOP,則返回與表格單元格有關的錯誤: 「行中單元格的列數或單元格數量溢出了爲表格指定的fo:表格列數量。
的錯誤表明我試圖把更多的表格單元格在我的錶行,而: 一)我預計只有1行要打印在這個例子中 B)中的更多的案例將產生更多的行國際標準書號,不是更多的表格單元
任何幫助將不勝感激,謝謝!
如何生成的XML是什麼樣子?它的表格中每行只有兩個單元格嗎? – Tomalak
你的意思是我想要生成的表格行?我正在嘗試生成pdf,但現在它每行只有2個單元格。 – jeevana
嗯,那麼它看起來更像是一個FOP問題,而不是XSLT問題。至少從我的角度來看,你的XSLT看起來不錯;該表格每行不應該有兩個以上的單元格。 – Tomalak