Xpath获取不同的子节点名称,名称计数是mor,然后是1

时间:2012-04-03 14:32:46

标签: xml xslt xpath

我如何通过Xpath获取不同的子节点名称,该名称匹配多次?

如果这些是xml:

> <el>
>     <name1></name1>
>     <name1></name1>
>     <name1></name1>
>     <name2></name2>
>     <name1></name1>
>     <name2></name2>
>     <name2></name2>
>     <name3></name3> </el>

结果:

NAME1 NAME2

不是名字3

2 个答案:

答案 0 :(得分:4)

通过检查兄弟轴进行分组显示二次(慢)行为,当在xslt 1中分组时,使用密钥几乎总是一个好主意(称为Muenchian分组)

<xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:template match="el">
 <xsl:for-each select="*[generate-id()=generate-id(key('n',name())[2])]">
  <xsl:value-of select="name()"/>
  <xsl:text> </xsl:text>
 </xsl:for-each>
</xsl:template>

<xsl:key name="n" match="*" use="name()"/>

</xsl:stylesheet>

答案 1 :(得分:0)

./*[preceding-sibling::node()/name(.) != name(.)]
   [following-sibling::node()/name(.) = name(.)]/name(.)

这会找到所有没有同名兄弟的子节点(不同的名字),但确实有一个同名的兄弟节点(多个)