我在尝试仅为一组相同的节点打印一行时遇到问题,我找不到相同节点的类似帖子。
我有一个包含一组相同节点的输入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会返回与table-cells相关的错误: &#34;行中的列号或单元格数溢出了为表指定的fo:table-columns的数量。&#34;
错误表明我正在尝试在表格行中放入更多表格单元格,而: a)我希望这个例子只打印一行 b)如果有更多的ISBN,则需要生成更多的行,而不是更多的表格单元格。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
<xsl:for-each select="BK[1]">
<xsl:value-of select".">
</xsl:for-each>
将[1]添加到您使用的for-each选项的末尾将导致第一个匹配被“打印”。
答案 1 :(得分:0)
真的是
<xsl:template name="BookDetails">
我认为应该是
<xsl:template match="BookDetails">
或
<xsl:template name="BookDetails" match="BookDetails">