XSL:"对于每个选择"功能无法正常工作

时间:2015-11-05 14:10:40

标签: xml xslt

我有一个.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;)。如何才能显示每个元素?

2 个答案:

答案 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。另外,您只创建一个表格单元格而没有行。