1

我对 xml 和 xsl 完全陌生,所以我很难让我的 xml 文件看起来像我想要的那样。基本上问题是表格正确显示了里面的所有东西,但 xml 的内容也显示在表格之后。所以我总是有一个表,后面跟着来自 xml 的所有数据。我正在 Firefox 16.0.2 上测试我的 xml 文件。

这是我的 xml 文件的一部分。

<root>
  <name id = "content_here">
    <first> Cathy </first>
    <last> Claires </last>
  </name>
  ... more names down here
</root>

我试图在 Firefox 上以表格格式显示它,这就是我为 xsl 文件所做的。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
    <xsl:template match="root">
      <html>
       <body>
         <table>
           <tr>
             <th> id </th> 
             <th> first name </th> 
             <th> last name </th>
           </tr>
           <xsl:for-each select="name"> 
            <tr>
             <td> <xsl:value-of select="@id"/> </td>
             <td> <xsl:value-of select="first"/> </td>
             <td> <xsl:value-of select="last"/> </td>
           </tr>
           </xsl:for-each>  
</table>        

<xsl:apply-templates/>
</body>
</html>
</xsl:template>
   </xsl:stylesheet>

任何人都可以给我一个提示,告诉我如何在我的桌子之后摆脱多余的内容?谢谢!

4

1 回答 1

1

xsl:apply-templates指令会导致模板上下文的所有节点子节点(此处为root元素)通过内置模板悬挂。从样式表中删除它应该删除内容。

请注意,尽管实际使用该xsl:apply-templates规则,但有更好的方法来执行此操作。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:template match="root">
    <html>
      <body>
        <table>
          <tr>
            <th> id </th> 
            <th> first name </th> 
            <th> last name </th>
          </tr>
          <xsl:apply-templates/>
        </table>        
      </body>
    </html>
  </xsl:template>

  <xsl:template match="name"> 
    <tr>
      <td> <xsl:value-of select="@id"/> </td>
      <td> <xsl:value-of select="first"/> </td>
      <td> <xsl:value-of select="last"/> </td>
    </tr>
  </xsl:template>
</xsl:stylesheet>

这里xsl:apply-templates用于将模板匹配应用到root您的table. 当一个name元素被匹配时,一个tr被创建。这通常比使用xsl:for-each.

于 2012-11-16T04:37:54.640 回答