子轴的上下文项的必需项类型是 node();提供的值 (.) 具有项目类型 xs:anyAtomicType

Required item type of the context item for the child axis is node(); supplied value (.) has item type xs:anyAtomicType

这是我的代码:

<xsl:for-each select="distinct-values(m/@x)">
  <xsl:variable name="x" select="."/>
  <xsl:value-of select="count(m[@x = $x])"/>
</xsl:for-each>

撒克逊人这样说:

Static error at char .. in xsl:for-each/@select on line .. column .. of main.xsl:
  XPTY0020: Required item type of the context item for 
  the child axis is node(); supplied value (.) has item 
  type xs:anyAtomicType

出了什么问题以及如何解决?

我认为你应该使用例如

<xsl:for-each-group select="m" group-by="@x">
  <xsl:value-of select="count(current-group())"/>
</xsl:for-each-group>

如果您想同意 distinct-values 尝试,请存储例如<xsl:variable name="context-node" select="."/>for-each 之前和内部访问 <xsl:value-of select="count($context-node/m[@x = $x])"/><xsl:value-of select="count($context-node/m[@x = current()])"/>

补充一下 Martin 的回答,错误的是在表达式 count(m[@x = $x]) 中,m 表示 ./child::m,也就是说,您要求的是上下文项的子元素名为 m;但是包含的 xsl:for-each 更改了上下文项,因此它是一个字符串(不同值之一),当然没有子项。