假设:
<illustratedPartsCatalog>
<figure id="fig1">...</figure>
<catalogSeqNumber>...</catalogSeqNumber>
<catalogSeqNumber>...</catalogSeqNumber>
<catalogSeqNumber>...</catalogSeqNumber>
<catalogSeqNumber>...</catalogSeqNumber>
<catalogSeqNumber>...</catalogSeqNumber>
<figure id="fig2">...</figure>
<catalogSeqNumber>...</catalogSeqNumber>
<catalogSeqNumber>...</catalogSeqNumber>
<catalogSeqNumber>...</catalogSeqNumber>
<catalogSeqNumber>...</catalogSeqNumber>
<catalogSeqNumber>...</catalogSeqNumber>
</illustratedPartsCatalog>
每个图都有自己的<catalogSeqNumber>s
表,但现在图1表还包含图2的条目,反之亦然。 <catalogSeqNumber>
的处理应该在到达下一个数字时停止。
解决了Tomalak的回答:
<xsl:template match="illustratedPartsCatalog">
<xsl:apply-templates />
</xsl:template>
我将此添加到<xsl:template match="figure">
<xsl:if test="following-sibling::*[1][self::catalogSeqNumber] and ancestor::illustratedPartsCatalog">
<xsl:call-template name="PI-TABLE"/>
</xsl:if>
并将其添加到PI-TABLE(构建<catalogSeqNumber>
表):
<xsl:apply-templates select="key('kCSN', @id)" />
答案 0 :(得分:0)
<xsl:key>
可以帮助您。
<xsl:key name="kCSN" match="catalogSeqNumber" use="preceding-sibling::figure[1]/@id">
<xsl:template match="illustratedPartsCatalog">
<xsl:apply-templates select="figure" />
</xsl:template>
<xsl:template match="figure">
<container>
<xsl:apply-templates select="key('kCSN', @id)" />
</container>
</xsl:template>
<xsl:template match="catalogSeqNumber">
<!-- catalogSeqNumber processing ... -->
</xsl:template>
这里的密钥通过<catalogSeqNumber>
之前的纬度的@id索引所有<figure>
个元素。
现在,当我们只处理<figure>
元素时,我们可以使用<catalogSeqNumber>
函数轻松提取关联的key()
元素。