我一直在尝试创建一个xslt模板,但它会一直无声地失败,就好像发生了异常但没有被捕获一样。没有写出结束括号,使输出无效;
XML文件
<?xml version="1.0"?>
<gallery>
<item>
<file>IMAGEHEADER1.jpg</file>
<thelink>michaeljackson123.htm</thelink>
</item>
<item>
<file>IMAGEHEADER2.jpg</file>
<thelink>barrywhite456.htm</thelink>
</item>
</gallery>
XSLT文件
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<body>
<table>
<tr>
<xsl:apply-templates />
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="gallery">
<xsl:for-each select="item">
<xsl:value-of select="position()"/>
<xsl:choose>
<xsl:when test="position() = 1">
<td rowspan="2" height="122" width="510">
<xsl:apply-templates select="." />
</td>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
<xsl:template match="item">
<a style="display:block;width:520px;height:330px" id="categorylink">
<xsl:attribute name="href">
<xsl:value-of select="thelink"/>
</xsl:attribute>
<xsl:apply-templates select="file" />
</a>
</xsl:template>
<xsl:template match="file">
<img alt="">
<xsl:attribute name="src">
<xsl:value-of select="."/>
</xsl:attribute>
</img>
</xsl:template>
</xsl:stylesheet>
输出无效,缺少关闭标签。
<html>
<body>
<tr>1<td rowspan="2" height="122" width="510"><a style="display:block;width:520px;height:330px" id="categorylink" href="michaeljackson123.htm"><img alt="" src="IMAGEHEADER1.jpg"></a></td>2</tr>
</body>
</html>
我的预期输出是;
<html>
<body>
<table>
<tr>1
<td rowspan="2" height="122" width="510">
<a style="display:block;width:520px;height:330px" id="categorylink" href="michaeljackson123.htm">
<img alt="" src="IMAGEHEADER1.jpg"></img>
</a>
</td>2
</tr>
</table>
</body>
</html>
请帮忙,看不清楚为什么会失败。
答案 0 :(得分:2)
如果我不得不冒险猜测,我会说尝试添加:
<xsl:output method="xml"/>
我认为正在发生的事情是你的序列化方法处于自动模式,当它看到默认(不是xhtml)命名空间中的html元素时,它默认为html序列化,其中不需要关闭空标记。
答案 1 :(得分:1)
您如何查看输出? HTML中不需要img元素上的结束标记,因此如果您在Web浏览器中查看它,很多时候浏览器将显示与其文字输入略有不同的内容。我至少用firebug / chrome调试器注意到了这一点。
答案 2 :(得分:1)
这是因为HTML和XML序列化之间存在差异:
您的样式表默认为HTML序列化,因为您的根元素是html
。在这种情况下,所有DTD声明的空元素都按照它的方式输出:
<img alt="" src="IMAGEHEADER1.jpg">
如果您想要XML序列化,则应声明:
<xsl:output method="xml"/>
然后你的输出将是:
<html>
<body>
<table>
<tr>1
<td rowspan="2" height="122" width="510">
<a style="display:block;width:520px;height:330px" id="categorylink" href="michaeljackson123.htm">
<img alt="" src="IMAGEHEADER1.jpg" />
</a>
</td>2
</tr>
</table>
</body>
</html>