2015-01-14 44 views
0

我不知道爲什麼我的for-each語句不工作。我檢查了其他帖子,但我沒有找到原因。如果有人可以幫助我?
這是我的xml文件:爲什麼爲每個不工作在我的xslt文件

<?xml version="1.0" encoding="utf-8" ?> 
<?xml-stylesheet type="text/xsl" href="Student.xslt"?> 
<students xmlns = "urn:students"> 
    <student> 
    <name>Pesho</name> 
    <sex>Both</sex> 
    <birthdate>1990-01-01</birthdate> 
    <phone>0888112233</phone> 
    <email>[email protected]</email> 
    <course>Beginners For Dummies</course> 
    <specialty>Dummy</specialty> 
    <facultyN>99</facultyN> 
    <exams> 
     <name>Math</name> 
     <tutor>Gosho</tutor> 
     <score>90</score> 
    </exams> 
    <enrollment> 
     <date>2015-11-01</date> 
     <examScore>5</examScore> 
    </enrollment> 
    <endorsements>some</endorsements> 
    </student> 
    <student> 
    <name>Gosho</name> 
    <sex>Female</sex> 
    <birthdate>1970-01-01</birthdate> 
    <phone>0888332211</phone> 
    <email>[email protected]</email> 
    <course>Beginners For Dummies</course> 
    <specialty>Beginner</specialty> 
    <facultyN>66</facultyN> 
    <exams> 
     <name>Biology</name> 
     <tutor>Pesho</tutor> 
     <score>90</score> 
    </exams> 
    <enrollment> 
     <date>2015-12-01</date> 
     <examScore>4</examScore> 
    </enrollment> 
    <endorsements>other</endorsements> 
    </student> 
</students> 

這是XSLT文件:

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

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

    <xsl:template match="/"> 
     <html> 
     <body> 
      <h1>Students Info</h1> 
      <table bgcolor="#E0E0E0" cellspacing="1"> 
      <tr bgcolor="#EEEEEE"> 
       <td>Name</td> 
       <td>Sex</td> 
       <td>Birth Date</td> 
       <td>Phone</td> 
       <td>Email</td> 
       <td>Course</td> 
       <td>Specialty</td> 
       <td>Faculty №</td> 
       <td>Exams 
       <td>Name</td> 
       <td>Tutor</td> 
       <td>Score</td> 
       </td>     
       <td>Enrollment 
       <td>Date</td> 
       <td>Exam Score</td> 
       </td> 
       <td>Endorsement</td> 
       </tr> 
      <xsl:for-each select ="/students/student"> 
      <tr> 
      <td> 
       <xsl:value-of select="name"/> 
      </td> 
      <td> 
       <xsl:value-of select="sex"/> 
      </td> 
      <td> 
       <xsl:value-of select="birthdate"/> 
      </td> 
      <td> 
       <xsl:value-of select="phone"/> 
      </td> 
      <td> 
       <xsl:value-of select="email"/> 
      </td> 
      <td> 
       <xsl:value-of select="course"/> 
      </td> 
      <td> 
       <xsl:value-of select="specialty"/> 
      </td> 
      <td> 
       <xsl:value-of select="facultyN"/> 
      </td> 
      <td> 
       <xsl:for-each select="exams"> 
       <td> 
        <xsl:value-of select="name"/> 
       </td> 
       <td> 
        <xsl:value-of select="tutor"/> 
       </td> 
       <td> 
        <xsl:value-of select="score"/> 
       </td> 
       </xsl:for-each> 
      </td> 
      <td> 
       <xsl:for-each select="enrollment"> 
       <td> 
        <xsl:value-of select="date"/> 
       </td> 
       <td> 
        <xsl:value-of select="examScore"/> 
       </td> 
       </xsl:for-each> 
      </td> 
      <td> 
       <xsl:value-of select="endorsement"/> 
      </td> 
      </tr> 
     </xsl:for-each> 
     </table> 
    </body> 
    </html> 
</xsl:template> 

.................. .................................................. .................................

回答

1

這是一個命名空間問題。

urn:students添加一個命名空間前綴聲明你的樣式表:

<xsl:stylesheet version="2.0" 
       xmlns:s="urn:students" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

然後在你的xsl:for-each/@select的XPath使用它:

 <xsl:for-each select ="/s:students/s:student"> 

做到這一刀切在樣式表中所有的XPath。

+0

這是行得通的。謝謝。你能告訴我這是什麼意思嗎? – emili

+0

不客氣。 's:'是一個名稱空間前綴。把它想象成完整的命名空間「urn:students」的縮寫。命名空間是一種在XML中分組和區分名稱的方法。請閱讀[Tim Bray的XML命名空間的早期解釋](http://www.xml.com/pub/a/1999/01/namespaces.html)或[Wikipedia的XML命名空間條目](http:// en。 wikipedia.org/wiki/XML_namespace)瞭解更多詳情。 – kjhughes