2016-08-19 102 views
1

所以最近我一直试图提取最简单的数据,但XSL始终选择第一条记录。XML保持选择相同的记录

现在我已经测试选择=“//学生”,它成功地选择所有的数据,但是,当涉及到表中显示出来,它我想搅乱

XML

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?> 
<school> 
<class unitId="3311"> 
<className>English</className> 
<studentList> 
<student id="1001">Lisa Simpson</student> 
<student id="1002">Barney Rubble</student> 
<student id="1003">Donald Duck</student> 
</studentList> 
</class> 
</school> 

XSL

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <html> 
    <body> 
    <h2>My Students</h2> 
    <table border="1"> 
     <tr bgcolor="#9acd32"> 
     <th style="text-align:left">STUDENT</th> 
     </tr> 
     <xsl:for-each select="//student"> 
     <tr> 
     <td><xsl:value-of select="../student"/></td> 
     </tr> 
     </xsl:for-each> 
    </table> 
    </body> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

我保持Runni吴进

enter image description here

+0

非常感谢帮助提前:) –

+0

莫非'的'在'td'中做更有用的事情?我并不太熟悉XSLT,但是你写给我看起来像“选择所有'学生'子节点,然后去他们的父母并选择第一个'学生'子节点”。这不是你想要的 - 你需要刚选择的节点,其相对路径是“。”。 – starturtle

+0

OMG YOU LREEND !!!!!!!我一直在以前的文档中使用这个代码,这是出于某种原因工作,但随后它停止工作在这个标准,即时通讯一个完整的初学者在XML感谢花花公子 –

回答

1

你应该使用:

<xsl:value-of select="." /> 

而且最好是在换各专门选择父节点:

<xsl:for-each select="/school/studentList/student"> 
[...] 
</xsl:for-each> 
0

中的XPath,../student,就是问题所在。对于文档中的每个student//student),您将转到其父项并选择子项student s。使用xsl:value-of您将只获得第一个值,因为XSLT1.0仅选择第一个元素的值。

将其更改为 <xsl:value-of select="."/>

,以便可以选择每一个student的当前值。