【发布时间】:2010-07-15 14:53:25
【问题描述】:
如果我运行以下 XSLT 代码:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kValueByVal" match="variable_name/@value"
use="."/>
<xsl:template match="assessment">
<xsl:for-each select="
/*/*/variable/attributes/variable_name/@value
[generate-id()
=
generate-id(key('kValueByVal', .)[1])
]
">
<xsl:value-of select=
"concat(., ' ', count(key('kValueByVal', .)), '
')"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
在以下 XML 上:
<assessment>
<variables>
<variable>
<attributes>
<variable_name value="FRED"/>
</attributes>
</variable>
</variables>
<variables>
<variable>
<attributes>
<variable_name value="MORTIMER"/>
</attributes>
</variable>
</variables>
<variables>
<variable>
<attributes>
<variable_name value="FRED"/>
</attributes>
</variable>
</variables>
</assessment>
我得到了想要的输出:
FRED 2
MORTIMER 1
(如果您愿意,请参阅my original question 了解更多信息。)
但是,如果我在这个输入上运行它:
<ExamStore>
<assessment>
<variables>
<variable>
<attributes>
<variable_name value="FRED"/>
</attributes>
</variable>
</variables>
<variables>
<variable>
<attributes>
<variable_name value="MORTIMER"/>
</attributes>
</variable>
</variables>
<variables>
<variable>
<attributes>
<variable_name value="FRED"/>
</attributes>
</variable>
</variables>
</assessment>
</ExamStore>
我什么也得不到。 (请注意,我只是将原始输入包装在一个 ExamStore 标记中。)我期待并希望得到相同的输出。
我为什么不呢?如何更改原始 XSLT 代码以获得相同的输出?
【问题讨论】:
-
+1 试图找出真相。请参阅我的回答,解释问题并提供解决方案。
标签: xslt counting distinct-values xslt-grouping