我有一个.xml文件,我应该使用XSL转换为html文件。
我的XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<Company>
<SectionA>
<Employee>Peter Barry</Employee>
<Employee>Lisa Stewart</Employee>
<Employee>Harry Rogers</Employee>
</SectionA>
<SectionB>
<Employee>Tom Riddle</Employee>
</SectionB>
</Company>
在我的html文件中,输出应如下所示: &#34; Peter Barry,Lisa Stewart,Harry Rogers&#34;。
问题是for-each功能在这种情况下不起作用! 我在XSL中的代码:
<?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>All</h2>
<table>
<td>
<xsl:for-each select="Company/SectionA">
<xsl:value-of select="Employee"/>
</xsl:for-each>
</td>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
在html中,它只显示第一个员工的姓名(即#34; Peter Barry&#34;)。如何才能显示每个元素?
答案 0 :(得分:1)
在这种情况下,使用for-each不是最佳选择,最好定义一个模板来处理每个员工,如下所示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>All</h2>
<xsl:apply-templates select="Company/SectionA"/>
</body>
</html>
</xsl:template>
<xsl:template match="SectionA">
<table>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="Employee">
<tr>
<td><xsl:value-of select="."/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
如果您想在A部分中为每位员工添加一行,请使用:
<xsl:template match="/">
<table>
<xsl:for-each select="Company/SectionA/Employee">
<tr><td><xsl:value-of select="."/></td></tr>
</xsl:for-each>
</table>
</xsl:template>
您现在拥有它的方式,您处于SectionA
和<xsl:value-of select="Employee"/>
的上下文中仅返回第一个子员工的值 - 这就是它在XSLT中的工作方式1.0。另外,您只创建一个表格单元格而没有行。