XSL仅显示第一个孩子的计算

时间:2013-12-16 21:44:22

标签: xml xslt

简而言之,我想计算每个学生节点的测试标记,但输出只能正确显示第一个学生的标记并将其复制到其他学生的标记。

这是我的XML:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="list_student.xsl"?>  

<university>

        <student>
            <name>Irwan</name>
            <id>8888999</id>
            <pass>1111</pass>
            <ic>911006</ic>
            <group>12</group>
            <team>2</team>
            <program>cs233</program>
            <phone>626134</phone>
            <email>aisya@yahoo.com</email>
            <test1>100</test1>
            <test2>100</test2>
            <project>80</project>
            <assignment1>90</assignment1>
            <assignment2>100</assignment2>
            <assignment3>100</assignment3>
            <assignment4>100</assignment4>
            <quiz1>10</quiz1>
            <quiz2>90</quiz2>
            <quiz3>80</quiz3>
            <quiz4>100</quiz4>
        </student>

        <student>
           <name>aida</name>
           <id>2011585383</id>
           <pass>1234</pass>
           <ic>911006115640</ic>
           <group>B</group>
           <team>14</team>
           <program>CS233</program>
           <phone>0189041004</phone>
           <email>syuhadaaida@yahoo.com</email>
           <test1>0</test1>
           <test2>0</test2>
           <project>100</project>
           <assignment1>100</assignment1>
           <assignment2>100</assignment2>
           <assignment3>100</assignment3>
           <assignment4>100</assignment4>
           <quiz1>100</quiz1>
           <quiz2>100</quiz2>
           <quiz3>100</quiz3>
           <quiz4>100</quiz4>
        </student>

    </university>

这是我的XSL:

    <?xml version='1.0'?><!-- DWXMLSource="student.xml" -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
  <html>
  <body>
    <table border="2" bgcolor="yellow">
      <tr>
         <th>NAME</th>
         <th>ID</th>
         <th>PASSWORD</th>
         <th>IC</th>
         <th>GROUP</th>
         <th>TEAM</th>
         <th>PROGRAMME</th>
         <th>PHONE NUMBER</th>
         <th>EMAIL</th>
         <th>TEST (%)</th>
         <th>QUIZ (%)</th>
         <th>PROJECT (%)</th>
         <th>ASSIGNMENT (%)</th>
         <th>TOTAL (%)</th>
      </tr>


      <xsl:for-each select="university/student">
         <tr>
            <td><xsl:value-of select="name"/></td>
            <td><xsl:value-of select="id"/></td>
            <td><xsl:value-of select="pass"/></td>
            <td><xsl:value-of select="ic"/></td>
            <td><xsl:value-of select="group"/></td>
            <td><xsl:value-of select="team"/></td>
            <td><xsl:value-of select="program"/></td>
            <td><xsl:value-of select="phone"/></td>
            <td><xsl:value-of select="email"/></td>
            <td><xsl:value-of select="(//test1 div 10) + (//test2 div 10)"/> <xsl:text>/20</xsl:text> </td>
            <td><xsl:value-of select="(//quiz1 div 40) + (//quiz2 div 40) + (//quiz3 div 40) + (//quiz4 div 40)"/> <xsl:text>/10</xsl:text></td>
            <td><xsl:value-of select="(//project div 5)"/> <xsl:text>/20</xsl:text> </td>
            <td><xsl:value-of select="(//assignment1 div 40) + (//assignment2 div 40) + (//assignment3 div 40) + (//assignment4 div 40)"/> <xsl:text>/10</xsl:text></td>
            <td><xsl:value-of select="((//test1 div 10) + (//test2 div 10)) + ((//quiz1 div 40) + (//quiz2 div 40) + (//quiz3 div 40) + (//quiz4 div 40)) + (//project div 5) + ((//assignment1 div 40) + (//assignment2 div 40) + (//assignment3 div 40) + (//assignment4 div 40))"/> <xsl:text>/60</xsl:text></td>
         </tr>

      </xsl:for-each>

    </table>
    <a href="index.php">Main Menu</a>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

您可以忽略该计算。问题是测试,项目等的输出是相同的,即使两个学生的分数不同。

即使我更改了XML中的标记,第二个学生的结果也与第一个学生相同。这可能是一个需要解决的简单问题,我很抱歉,因为我对XSL知之甚少。

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:0)

test1之前的//告诉XSL返回XML的根目录,尝试删除它们。