0

我有一个这样的xml。

< cars>  
< car>  
< ford color="black" >eco sport< /ford >    
< maruti color="red" >zen< /maruti>  
< hyundai color="blue" >accent< /hyundai>  
< /car>  
< car>  
< ford color="green" >figo< /ford >    
< maruti color="red" >swift< /maruti>  
< hyundai color="white" >santro< /hyundai>  
< /car>  
< /cars>

我需要有一个像这样的 HTML 表

COMPANY   COLOR    MODEL  
 ford     black   ecosport  
 maruti   red     zen    
 hyundai  green   figo  
 ford     red     swift  
 maruti   red     zen    
 hyundai  white   santro

谁能帮我解决这个问题。我对 XSLT 很陌生,为此花了一些宝贵的时间,但没有运气。提前致谢。下面是我一直在尝试的 XSLT

<xsl:template match ="/">
    <html>
      <head>
        <title> Cars </title>
      </head>
      <body>
        <xsl:apply-templates />
      </body>
    </html>
</xsl:template>

<xsl:template match="cars">
    <table width="400" border="1" >
        <tr bgcolor = "#cccccc" >
            <td>COMPANY</td>
            <td>COLOR</td>
            <td>MODEL</td>
        </tr>
<xsl:for-each select="car">
        <tr>
        <xsl:for-each select="./">
            <td><xsl:value-of select="name()"/></td>    
            <td> <xsl:value-of select="@color" /> </td>
                <td> <xsl:value-of select="ford" /> </td>
        </xsl:for-each>
         </tr>
</xsl:for-each>
     </table>
</xsl:template>

4

2 回答 2

2

XSLT 有一些(小)问题。首先,这条线是无效的

<xsl:for-each select="./">

当您位于汽车元素上时,此时您需要做的是遍历每个子元素,就像这样

<xsl:for-each select="*">

其次,您希望在此循环中创建tr元素,而不是像您当前所做的那样在外部创建。第三,要获得模型,您正在这样做

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

应该是这个的时候

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

试试这个 XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="/">
        <html>
            <head>
                <title> Cars </title>
            </head>
            <body>
                <xsl:apply-templates/>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="cars">
        <table width="400" border="1">
            <tr bgcolor="#cccccc">
                <td>COMPANY</td>
                <td>COLOR</td>
                <td>MODEL</td>
            </tr>
            <xsl:for-each select="car">
                <xsl:for-each select="*">
                    <tr>
                        <td>
                            <xsl:value-of select="name()"/>
                        </td>
                        <td>
                            <xsl:value-of select="@color"/>
                        </td>
                        <td>
                            <xsl:value-of select="."/>
                        </td>
                    </tr>
                </xsl:for-each>
            </xsl:for-each>
        </table>
    </xsl:template>
</xsl:stylesheet>

当应用于您的 XML 时(删除了元素名称中的空格!),输出以下内容

<html>
    <head>
        <title> Cars </title>
    </head>
    <body>
        <table width="400" border="1">
            <tr bgcolor="#cccccc">
                <td>COMPANY</td>
                <td>COLOR</td>
                <td>MODEL</td>
            </tr>
            <tr>
                <td>ford</td>
                <td>black</td>
                <td>eco sport</td>
            </tr>
            <tr>
                <td>maruti</td>
                <td>red</td>
                <td>zen</td>
            </tr>
            <tr>
                <td>hyundai</td>
                <td>blue</td>
                <td>accent</td>
            </tr>
            <tr>
                <td>ford</td>
                <td>green</td>
                <td>figo</td>
            </tr>
            <tr>
                <td>maruti</td>
                <td>red</td>
                <td>swift</td>
            </tr>
            <tr>
                <td>hyundai</td>
                <td>white</td>
                <td>santro</td>
            </tr>
        </table>
    </body>
</html>
于 2013-08-13T07:41:16.570 回答
1

你几乎拥有它。请试一试:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
  <xsl:strip-space elements="*" />

  <xsl:template match ="/">
    <html>
      <head>
        <title> Cars </title>
      </head>
      <body>
        <xsl:apply-templates />
      </body>
    </html>
  </xsl:template>

  <xsl:template match="cars">
    <table width="400" border="1" >
      <tr bgcolor = "#cccccc" >
        <th>COMPANY</th>
        <th>COLOR</th>
        <th>MODEL</th>
      </tr>
      <xsl:apply-templates />
    </table>
  </xsl:template>

  <xsl:template match="car/*">
    <tr>
      <td>
        <xsl:value-of select="name()"/>
      </td>
      <td>
        <xsl:value-of select="@color" />
      </td>
      <td>
        <xsl:value-of select="." />
      </td>
    </tr>
  </xsl:template>
</xsl:stylesheet>
于 2013-08-13T07:46:33.133 回答