在XSLT 1.0中使用Muenchian分组。当在应用模板中使用时,它对第一个<level>
元素起作用,然后对其他<level>
元素不起作用。
示例输入XML:注意<areas>
的兄弟可以是变量
<levels>
<level>
<areas>
<p1>A</p1>
<p1>B</p1>
<p2>C</p2>
</areas>
</level>
<level>
<areas>
<p3>C</p4>
<p3>D</p3>
<p4>E</p4>
</areas>
</level>
</levels>
示例XSLT :
<xsl:key name="names" match="*/areas/*" use="local-name(.)" />
<xsl:template match="/levels/*">
<xsl:apply-templates select="./areas/*[generate-id(.)=generate-id(key('names', local-name(.)))]" mode="A" />
</xsl:template>
<xsl:template match="*" mode="A">
<xsl:variable name="category" select="local-name(.)" />
<xsl:element name="{$category}">
</xsl:element>
</xsl:template>
所需输出:<p1>
<p2>
<p3>
<p4>
输出返回:
<p1>
<p2>
对于为什么它忽略第二个<level>
元素有什么想法吗?
谢谢。
你可以修改
<xsl:template match="/levels/*">
<xsl:apply-templates select="./areas/*[generate-id(.)=generate-id(key('names', local-name(.)))]" mode="A" />
</xsl:template>
<xsl:template match="/levels">
<xsl:apply-templates select="level/areas/*[generate-id(.)=generate-id(key('names', local-name(.)))]" mode="A" />
</xsl:template>