Xml 使用xsl:for每个组从属性中选择和聚合值

Xml 使用xsl:for每个组从属性中选择和聚合值,xml,xslt-2.0,Xml,Xslt 2.0,我尝试使用xsl:for每个组来获得每种类型的每个用户的平均评分 示例XML: <Ratings> <Rating name="Type1"> <items userID="001" rating="5"/> <items userID="001" rating="3"/> <items userID="002" rating="2"/> <items

我尝试使用xsl:for每个组来获得每种类型的每个用户的平均评分

示例XML:

    <Ratings>
    <Rating name="Type1">
        <items userID="001" rating="5"/>
        <items userID="001" rating="3"/>
        <items userID="002" rating="2"/>
        <items userID="003" rating="5"/>
    </Rating>
    <Rating name="Type2">
        <items userID="002" rating="3"/>
        <items userID="003" rating="4"/>
        <items userID="003" rating="3"/>
    </Rating>
    <Rating name="Type3">
        <items userID="002" rating="5"/>
        <items userID="003" rating="5"/>
    </Rating>
</Ratings>

我已经了解了下面的XSLT(从通用复制模板开始,未显示)


这让我(似乎?)接近-每个用户都会列出一次,并在averageRating属性中显示其分组类型的评分。除非一个用户在一个类型中有多个评级,否则只显示最后一个评级,而不是该用户在该类型中所有评级的平均值

电流输出:

    <Ratings>
    <Rating name="Type1" averageRating="3.75">
      <userRating userID="001" averageRating="3"/>
      <userRating userID="002" averageRating="2"/>
      <userRating userID="003" averageRating="5"/>
   </Rating>
    <Rating name="Type2" averageRating="3.33">
      <userRating userID="002" averageRating="3"/>
      <userRating userID="003" averageRating="3"/>
   </Rating>
    <Rating name="Type3" averageRating="5">
      <userRating userID="002" averageRating="5"/>
      <userRating userID="003" averageRating="5"/>
   </Rating>
</Ratings>

期望输出:

    <Ratings>
    <Rating name="Type1" averageRating="3.75">
      <userRating userID="001" averageRating="4"/> <!-- average of 5 and 3 -->
      <userRating userID="002" averageRating="2"/>
      <userRating userID="003" averageRating="5"/>
   </Rating>
    <Rating name="Type2" averageRating="3">
      <userRating userID="002" averageRating="3"/>
      <userRating userID="003" averageRating="3.5"/> <!-- average of 4 and 3 -->
   </Rating>
    <Rating name="Type3" averageRating="5">
      <userRating userID="002" averageRating="5"/>
      <userRating userID="003" averageRating="5"/>
   </Rating>
</Ratings>

当我添加评级值作为元素值(而不是属性)时,所有评级都会显示,但作为字符串,即计算仍然不起作用,例如:

      <userRating userID="001">53</userRating>
53
谢谢

而不是

    <userRating userID="{@userID}">
            <xsl:for-each select="current-group()">
                <xsl:attribute name="averageRating">
                    <xsl:value-of select="round(avg(current()/@rating),2)"/>
                </xsl:attribute>
            </xsl:for-each>
        </userRating>

你只是想

<userRating userID="{@userID}" averageRating="{round(avg(current-group()/@rating),2)}">

<userRating userID="{@userID}" averageRating="{round(avg(current-group()/@rating),2)}">