Muenchian grouping and /*



在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>

相关内容

  • 没有找到相关文章

最新更新