我正在尝试准备一个xslt文件来打印我的xml列表,但是我遇到了困难。我几乎已经完成了整个项目,但我的问题是我有无限的元素,可能在我的xml文件中出现不止一次,例如我有一些无限的exterior_color元素,并且多次出现在xml文件中,当我列出整个xml下面没有这样的问题,但它没有列出其他必须的exterior_color元素。我错过了什么,但我不知道是什么。感谢您的帮助
car_dealer.xml
<?xml version="1.0" encoding="UTF-8"?>
<car_dealer>
<car>
<year>2013</year>
<make>Ford</make>
<model>Mustang</model>
<transmission>Manual</transmission>
<exterior_color>Red</exterior_color>
<cylinders>8</cylinders>
<fuel type="fluid">Diesel</fuel>
<fuel type="gas">LPG</fuel>
<doors>4</doors>
<warranty>true</warranty>
<description>Car</description>
</car>
<car>
<year>1995</year>
<make>Ford</make>
<model>Mustang</model>
<transmission>Manual</transmission>
<exterior_color>Red</exterior_color>
<exterior_color>Blue</exterior_color>
<cylinders>8</cylinders>
<fuel type="fluid">Diesel</fuel>
<doors>4</doors>
<warranty>true</warranty>
<description>Car</description>
</car>
</car_dealer>
car_dealer.xslt
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Car Dealers</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Year</th>
<th>Make</th>
<th>Model</th>
<th>Transmission</th>
<th>Exterior Color</th>
<th>Cylinders</th>
<th>Fuel</th>
<th>Doors</th>
<th>Warranty</th>
<th>Description</th>
</tr>
<xsl:for-each select="car_dealer/car">
<xsl:sort order="ascending" select="year"/>
<tr>
<td><xsl:value-of select="year"/></td>
<td><xsl:value-of select="make"/></td>
<td><xsl:value-of select="model"/></td>
<td><xsl:value-of select="transmission"/></td>
<td><xsl:value-of select="exterior_color"/></td>
<td><xsl:value-of select="cylinders"/></td>
<td><xsl:value-of select="fuel"/><br />Type:<xsl:value-of select="fuel/@type"/> </td>
<td><xsl:value-of select="doors"/></td>
<td><xsl:value-of select="warranty"/></td>
<td><xsl:value-of select="description"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
执行 xsl:value-of 只会返回此情况下第一个元素的值。您应该做的是用 xsl:apply-templates
替换它<xsl:apply-templates select="exterior_color"/>
然后有一个匹配 exterior_color 的模板,您可以在其中输出值
<xsl:template match="exterior_color">
<xsl:value-of select="." />
<br />
</xsl:template>
或者,如果您不想在最后一种颜色后添加新行,则可以执行此操作
<xsl:template match="exterior_color">
<xsl:if test="position() > 1">
<br />
</xsl:if>
<xsl:value-of select="." />
</xsl:template>
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Car Dealers</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Year</th>
<th>Make</th>
<th>Model</th>
<th>Transmission</th>
<th>Exterior Color</th>
<th>Cylinders</th>
<th>Fuel</th>
<th>Doors</th>
<th>Warranty</th>
<th>Description</th>
</tr>
<xsl:for-each select="car_dealer/car">
<xsl:sort order="ascending" select="year"/>
<tr>
<td><xsl:value-of select="year"/></td>
<td><xsl:value-of select="make"/></td>
<td><xsl:value-of select="model"/></td>
<td><xsl:value-of select="transmission"/></td>
<td><xsl:apply-templates select="exterior_color"/></td>
<td><xsl:value-of select="cylinders"/></td>
<td><xsl:value-of select="fuel"/><br />Type:<xsl:value-of select="fuel/@type"/> </td>
<td><xsl:value-of select="doors"/></td>
<td><xsl:value-of select="warranty"/></td>
<td><xsl:value-of select="description"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="exterior_color">
<xsl:if test="position() > 1">
<br />
</xsl:if>
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>