[英]Xsl-Fo How to fix multiple template call caused by grouping?
我有一个问题,当我将for-each-group
和for-each select="current-group()"
与apply-templates select="."
结合使用时apply-templates select="."
相同的模板ist对相同的元素调用了两次,从而导致对生成的ID进行双重定义。
我的xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<root>
<report>
<reportelements>
<section name="1 section">
<pagemaster>DIN-A4-PREFACE</pagemaster>
<reportelements>
<picture name="1.1 picture">
<pagemaster>TITLEPAGE</pagemaster>
<reportelements />
</picture>
<section name="1.2 section">
<pagemaster>DIN-A4-PREFACE</pagemaster>
<subtitlecontent />
<reportelements>
<paragraph name="1.2.1 paragraph">
<pagemaster>TITLEPAGE</pagemaster>
<reportelements />
</paragraph>
<paragraph name="1.2.2 paragraph">
<pagemaster>DIN-A4-PREFACE</pagemaster>
<reportelements />
</paragraph>
我有问题的xsl通话是
<xsl:for-each-group select=".//reportelements/*[pagemaster != '']" group-adjacent="pagemaster">
<fo:page-sequence master-reference="{current-grouping-key()}">
<xsl:for-each select="current-group()">
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="."/>
</fo:flow>
</xsl:for-each>
</fo:page-sequence>
</xsl:for-each-group>
这里的问题是,曾经为该组调用了应用模板
-1 section
-1.1 picture
-1.2 section
-1.2.1 paragraph
-1.2.2 paragraph
然后再次针对:
-1.2 section
-1.2.1 paragraph
-1.2.2 paragraph
因此,在1.2节的模板中有一个名为block id="{generate-id(.)}"
的block id="{generate-id(.)}"
该block id="{generate-id(.)}"
被调用两次,并在生成pdf时导致错误。
我想要的是对每个元素单独调用apply模板,而对于子元素则不调用它。
您可能希望在以下方面有相同的变化:
<xsl:apply-templates select="node() except section" />
在其中选择所有子节点, 除了那些不会在当前组中的子节点。
严格来说,您需要一些可以测试当前组成员身份的东西,例如(未测试):
<xsl:apply-templates select="node()[. << current-group()[last()]],
current-group()[last()]" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.