Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 计算玩家在不同难度水平下玩游戏的次数_Xml_Xslt_Xpath_Xslt 2.0 - Fatal编程技术网

Xml 计算玩家在不同难度水平下玩游戏的次数

Xml 计算玩家在不同难度水平下玩游戏的次数,xml,xslt,xpath,xslt-2.0,Xml,Xslt,Xpath,Xslt 2.0,我有一个xml和xslt文件,如下所示。我在一张表格中显示了游戏名和玩家名。但是现在我试着做一件事,我不知道怎么做 我想展示一个玩家在一个新手游戏中玩了多少次,简单、中等、困难、传奇级别和总数。例如,我希望每一行如下所示: GameName | Player Name | NoviceLevels | EasyLevels | MediumLevels | HardLevels | Total 我已经尝试了很多选择,但我没有成功把这个工作这样。你知道如何做到这一点吗 <games>

我有一个xml和xslt文件,如下所示。我在一张表格中显示了游戏名和玩家名。但是现在我试着做一件事,我不知道怎么做

我想展示一个玩家在一个新手游戏中玩了多少次,简单、中等、困难、传奇级别和总数。例如,我希望每一行如下所示:

GameName | Player Name | NoviceLevels | EasyLevels | MediumLevels | HardLevels | Total
我已经尝试了很多选择,但我没有成功把这个工作这样。你知道如何做到这一点吗

<games>
  <game>
    <gamename>GameTitle 1</gamename>
    <players>
      <player>
          <playername>John</playername>
          <difficultlevel>Novice</difficultlevel>
          <duration>130</duration>
      </player>
      <player>
        <playername>John</playername>
        <difficultlevel>Easy</difficultlevel>
        <duration>210</duration>
      </player>
      <player>
        <playername>Zed</playername>
        <difficultlevel>Medium</difficultlevel>
        <duration>300</duration>
      </player>
    </players>
  </game>
</games>

游戏名称1
约翰
新手
130
约翰
容易的
210
泽德
中等
300
这个xslt:

<table>
<xsl:for-each select="//games">
 <tr>
   <th>GameName</th>
   <th>Player</th>
   <th>Beginner</th>
   <th>Beginner</th>
   <th>Medium</th>
   <th>Hard</th>
   <th>Legend</th>
   <th>Total</th>
 </tr>
<xsl:for-each select="game">
 <tr>
   <td><xsl:value-of select="gamename"/></td>
   <td><xsl:value-of select="players/player/playername"/></td>
   ....???
 </tr>
 </xsl:for-each>
</table>

游戏名
玩家
初学者
初学者
中等
硬的
传奇
全部的
....???

我所拥有的是:

这里是对您尝试过的内容的改编,假设XSLT 2.0处理器为每个组使用

<html xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xsl:version="2.0">
<table>

        <tr>
            <th>GameName</th>
            <th>Player</th>
            <th>NoviceLevels</th>
            <th>EasyLevels</th>
            <th>Medium</th>
            <th>Hard</th>
            <th>Legend</th>
            <th>Total</th>
        </tr>
        <xsl:for-each select="games/game">
          <xsl:for-each-group select="players/player" group-by="playername">
            <tr>
                <td><xsl:value-of select="ancestor::game/gamename"/></td>
                <td><xsl:value-of select="playername"/></td>
                <td><xsl:value-of select="current-group()[difficultlevel = 'Novice']/duration"/></td>
                <td>...</td>
                <td>...</td>
                <td>...</td>
                <td>...</td>
                <td><xsl:value-of select="sum(current-group()/duration)"/></td>
            </tr>
          </xsl:for-each-group>
        </xsl:for-each>


    </table>
</html>

游戏名
玩家
新手级别
轻松级别
中等
硬的
传奇
全部的
...
...
...
...
我还没有分别为所有表单元格级别详细说明代码,我希望从所说明的一个级别可以清楚地知道如何做到这一点


我也不确定所示的方法是否足够,它假设任何玩家每场游戏的每个难度级别只有一个条目,如果没有,您需要使用嵌套分组,按
difficultylevel

这是一个分组问题。进行搜索-这可能是这里最常被问到的XSLT问题。请注意,XSLT 1.0或2.0的答案不同。请不要将您的问题同时标记为XSLT 1.0和XSLT 2.0。谢谢,您的代码工作得非常好。但是我得到了这个错误:错误:“第144行:每个组不支持的XSL元素”。你知道为什么吗?(我用java中的xml文件创建一个html文件)我清楚地说“假设每个组都使用XSLT 2.0处理器”,所以如果你使用java,请确保在Maven或Saxon.sourceforge.net上使用Saxon 9(开放源代码版本(即所谓的Home Edition))。