我的文件是:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="university_style.xsl"?>
<!DOCTYPE library SYSTEM "validator.dtd">
<university>
<total_faculty>13</total_faculty>
<faculty>
<id>1</id>
<name>name 1</name>
<total_chairs>9</total_chairs>
<chairs_list>
<chair>name 1</chair>
<chair>name 2</chair>
<chair>name 3</chair>
...
</chairs_list>
</faculty>
</university>
和xsl
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table border="1" cellpadding="4" cellspacing="0">
<caption>total_faculty:<xsl:value-of select="university/total_faculty"/></caption>
<tr bgcolor="#999999" align="center">
<th>id</th>
<th>name</th>
<th>total chairs</th>
<th>chairs</th>
</tr>
<xsl:for-each select="university/faculty">
<tr>
<td>
<xsl:value-of select="id"/>
</td>
<td>
<xsl:value-of select="name"/>
</td>
<td>
<xsl:value-of select="total_chairs"/>
</td>
<td>
<!--<p><xsl:value-of select="chairs_list"/></p> -->
<xsl:for-each select="chairs_list">
<p><xsl:value-of select="chair"/> </p>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我想在新行中显示所有元素(
主席
)。 但我看到第一个元素或全部。如果使用则所有列表都在一行中。
如果我使用:
<xsl:for-each select="chairs_list">
<p><xsl:value-of select="chair"/> </p>
</xsl:for-each>
我只看到列表的第一个元素。怎么解决? :)
答案 0 :(得分:1)
只需将xsl:for-each
更改为
<xsl:for-each select="chairs_list/chair">
<p><xsl:value-of select="."/></p>
</xsl:for-each>
结果:
<p>name 1</p>
<p>name 2</p>
<p>name 3</p>
此调整后的for-each
选择chair
中的所有chairs_list
元素,循环遍历它们,并生成此循环的当前节点 - select="."
的内容作为输出。您之前的for-each
仅选择了chairs_list
,因此<xsl:value-of select="chair"/>
仅将此列表中的第一个chair
作为输出。