2016-04-09 5 views
1

Ich habe ein Problem mit dem Wert in der Tabelle mit Hilfe von keyid. Es zeigt falsch anstelle des Wertes, den ich wollte. Die Informationen, die in diesen Codes gefunden werden, sind nur zufällig generiert.
Das ist mein XMLWert kann nicht mithilfe von keyid in XML und XSLT ausgewählt werden

<?xml version="1.0" encoding="UTF-8"?> 


    <unit> 
     <assessment_details> 
      <assessment_item> idkey="1" 
       <type>Assignment 1</type> 
       <desc>Introductory HTML/XML/XSLT website</desc> 
       <assess_value>20</assess_value> 
      </assessment_item> idkey="2" 
      <assessment_item> 
       <type>Assignment 2</type> 
       <desc>Advanced XMl/XSLT web application</desc> 
       <assess_value>30</assess_value>    
      </assessment_item> 
      <assessment_item> idkey="3" 
       <type>Examination</type> 
       <desc>End of semester examination</desc> 
       <assess_value>50</assess_value> 
      </assessment_item> 
     </assessment_details> 
     <student> 
      <student_id>16390227</student_id> 
      <sname>Battle</sname> 
      <fname>Gillian</fname> 
      <results> 
       <stu_mark resultkeyid="1">12</stu_mark> 
       <stu_mark resultkeyid="2">25</stu_mark> 
       <stu_mark resultkeyid="3">30</stu_mark> 
       </results> 
      <final_mark> </final_mark> 
      <final_grade> </final_grade> 
     </student> 
    </unit> 

Das ist mein XSLT

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html> 
<body> 
<h2>Student Results</h2> 

    <table> 
    <tr> 
     <th>Student ID</th> 
     <th>Surname</th> 
     <th>Firstname</th> 
     <th>Assign1</th> 
     <th>Assign2</th> 
     <th>Exam</th> 
     <th>Final Mark</th> 
     <th>Final Grade</th> 
    </tr> 

    <xsl:for-each select="unit/student"> 
    <tr> 
     <td><xsl:value-of select="student_id"/></td> 
     <td><xsl:value-of select="sname"/></td> 
     <td><xsl:value-of select="fname"/></td> 
     <td><xsl:value-of select="resultkeyid='1'"/></td> 
     <td><xsl:value-of select="resultkeyid='2'"/></td> 
     <td><xsl:value-of select="resultkeyid='3'"/></td> 
     <td><xsl:value-of select="final_mark"/></td> 
     <td><xsl:value-of select="final_grade"/></td> 
    </tr> 
    </xsl:for-each> 
    </table> 
</body> 
</html> 
</xsl:template></xsl:stylesheet> 

In der Tabelle ist, werden die Werte in ASSIGN1, Assign2 und Prüfung ist 'falsch' statt 12,25,30.

Antwort

1

Verwenden Sie <xsl:value-of select="results/stu_mark[@resultkeyid = '1']"/> und so weiter.

+0

(Vielleicht eine kurze Erklärung hinzufügen? Oder ist das wirklich XSLT 101, wie ich den gleichen Fehler sofort entdeckte?) – usr2564301

+0

Ich habe vor kurzem begonnen, XML und XSLT mit ein wenig Hintergrund in der Programmierung zu lernen, so dass kleinere Fehler in der Regel gemacht werden. Ich erinnere mich auch nicht wirklich an die ganze Syntax und die darin verwendeten Codes. –

+1

@MikeJoe, Ihr XSLT ist in Ordnung, aber ich würde vorschlagen, dass Sie zuerst ein Tutorial über XPath machen, da dies wichtiger ist, um die gewünschten Daten im XML-Format auswählen zu können. Der Pfad "results/stu_mark" wählt alle "stu_mark" grand childs des 'results'-Child des' student' Context-Knotens innerhalb des 'for-each' aus, und dann können Sie ein Prädikat in eckigen Klammern hinzufügen, um das Element auszuwählen Sie wollen. In Ihrem Versuch hatten Sie einen syntaktisch korrekten XPath-Ausdruck geschrieben, aber einen, der einen booleschen Wert ergibt. –

Verwandte Themen