使用XSLT样式表,我试图为父元素的每个第一个子节点计算不同的值。
示例XML:
<Root>
<Parent>
<Child>
<Child2>
<Child3>Value2</Child3>
</Child2>
</Child>
<Child>
<Child2>
<Child3>Value3</Child3>
</Child2>
</Child>
</Parent>
<Parent>
<Child>
<Child2>
<Child3>Value2</Child3>
</Child2>
</Child>
<Child>
<Child2>
<Child3>Value2</Child3>
</Child2>
</Child>
</Parent>
<Parent>
<Child>
<Child2>
<Child3>Value2</Child3>
</Child2>
</Child>
<Child>
<Child2>
<Child3>Value2</Child3>
</Child2>
</Child>
</Parent>
</Root>
使用我上面的XML示例,预期结果将为1。 通过使用count函数,我设法为所有子项计算了不同的值,但我不知道如何为每个第一个子项进行计算。
count(//Parent/Child/Child2/Child3[not(.=following::Child3)])
答案 0 :(得分:1)
您想要的表情是这个...
<xsl:value-of select="count(//Parent/Child[1]/Child2/Child3[not(.=following::Parent/Child[1]/Child2/Child3)])" />
不是很优雅或效率很高。
但是您已将其标记为XSLT 1.0,这表明您正在样式表中执行计数。如果是这样,请考虑如下定义键:
<xsl:key name="children" match="Parent/Child[1]/Child2" use="Child3" />
然后表达式变成这个。...
<xsl:value-of select="count(//Child2[generate-id() = generate-id(key('children', Child3)[1])])" />
这利用了一种Muenchian Grouping的技术,值得一读。