在XSLT 1.0中使用Muenchian分组。在apply-templates中使用时,它适用于第一个<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>
元素的任何想法?
感谢。
答案 0 :(得分:1)
你可以改变
<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>