我有一个这样的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>
我需要一个像一样的HTMI表格
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>
XSLT有一些(小)问题。首先,这条线不是有效的
<xsl:for-each select="./">
此时,当您定位在car元素上时,您需要做的是迭代每个子元素,就像一样
<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>
你几乎吃过了。请尝试一下:
<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>