我在尝试仅为一组相同的节点打印一行时遇到问题,但我找不到相同节点的类似帖子。
我有一个包含一组相同节点的输入 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:table-columns 的数量。”
该错误表明我正在尝试在我的表格行中放置更多表格单元格,而:a)我希望此示例仅打印 1 行 b)在更多 ISBN 的情况下生成更多行,而不是更多表格单元格.
任何帮助将不胜感激,谢谢!