Xml Xsl Fo如何修复分组导致的多模板调用?

Xml Xsl Fo如何修复分组导致的多模板调用?,xml,xslt,xsl-fo,Xml,Xslt,Xsl Fo,我有一个问题,当我对每个组使用和对每个组使用时,select=“current-group()”与apply templates select=“.”“结合使用时,相同的模板会对相同的元素调用两次,这会导致生成的id的双重定义 我的xml如下所示: DIN-A4-前言 标题页 DIN-A4-前言 标题页 DIN-A4-前言 我有问题的xsl调用是 这里的问题是,应用模板曾经为组调用过 -1 section -1.1 picture -1.2 section -1.2.1

我有一个问题,当我对每个组使用
和对每个组使用
时,select=“current-group()”
apply templates select=“.”“
结合使用时,相同的模板会对相同的元素调用两次,这会导致生成的id的双重定义

我的xml如下所示:


DIN-A4-前言
标题页
DIN-A4-前言
标题页
DIN-A4-前言
我有问题的xsl调用是


这里的问题是,应用模板曾经为组调用过

-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(.)}”
,它被调用两次,并在生成pdf时导致错误


我想要的是为每个元素单独调用apply模板,而不为子元素调用它。

您可能希望在以下方面有相同的变化:

<xsl:apply-templates select="node() except section" />

选择除不在当前组中的子节点以外的所有子节点

严格来说,您需要测试当前组成员资格的内容,例如(未测试):



您没有显示足够的代码,我们无法看到错误所在。如果您不希望元素的模板规则递归到子元素,请编写一个不调用apply-templates的模板规则。问题是您的结果中有重复的ID,还是您有完整的已处理部分的第二个副本?这个问题尚不清楚。您正在分组,然后依次迭代组中的每个成员。这不会显示模板实例化两次的流。
<xsl:apply-templates select="node()[. &lt;&lt; current-group()[last()]],
                             current-group()[last()]" />