我希望将一些XML转换为具有以下格式的HTML:
col1col2col3
注意:输出是HTML,包括省略的可选关闭标签。这是问题所在,也是提出问题的原因。
我使用的XSL片段如下:
你可以看到,XSL的核心与我想要的HTML相匹配(为了易读而包装):
注意:那些知道我从XSLT中得到的错误并且已经知道答案的人,请略过此内容。当我呈现我的XSL(不要忘记,它是一种xml形式)时,我会遇到非格式良好的错误:“结束标记'TR'与开始标记'TD'不匹配。”这是很有道理的。确实:
我在关闭
如何将
另请参阅:
然后,通过使用
或者
如何在HTML输出中包含
我使用的XSL片段如下:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
doctype-system='http://www.w3.org/TR/html4/strict.dtd'
doctype-public='-//W3C//DTD HTML 4.01//EN'
indent='yes'
method='html'
/>
...
<xsl:for-each select="/">
<TR><TD><xsl:value-of select="col1"/><TD><xsl:value-of select="col2"/><TD><xsl:value-of select="col3"/></TR>
</xsl:for-each>
你可以看到,XSL的核心与我想要的HTML相匹配(为了易读而包装):
<TR> <TD><xsl:value-of select="Column1"/>
<TD><xsl:value-of select="Column2"/>
<TD><xsl:value-of select="Column3"/> </TR>
注意:那些知道我从XSLT中得到的错误并且已经知道答案的人,请略过此内容。当我呈现我的XSL(不要忘记,它是一种xml形式)时,我会遇到非格式良好的错误:“结束标记'TR'与开始标记'TD'不匹配。”这是很有道理的。确实:
<TD><xsl:value-of select="Column3"/> </TR>
我在关闭
TR
之前没有关闭 TD
元素。所以问题是:如何将
xml
转换为 HTML
,因为 HTML
不是 xml
?另请参阅:
更新一
有人建议可以直接包含闭合标签,以使XSL验证通过(为方便阅读而包装):
<TR> <TD><xsl:value-of select="col1"/></TD>
<TD><xsl:value-of select="col2"/></TD>
<TD><xsl:value-of select="col3"/></TD> </TR>
然后,通过使用
xsl:output method='html'
,最终的HTML内容将会神奇地省略</TD>
标签。但事实并非如此:<TR><TD>col1</TD><TD>col2</TD><TD>col3</TD></TR>
更新二
有人建议我放弃,不要再问这个问题,直接包含可选的结束标签。这是可能的,但这不是我的问题。此外,“解决方案”对于禁止使用结束标签的元素无效,例如:
<BR/>
或者
<BR></BR>
如何在HTML输出中包含
<BR>
元素,考虑到在HTML中关闭<BR>
元素是被禁止的。
</TD>
是有效的 HTML。但这个问题也可以适用于<BR>
,其中</BR>
是无效的 HTML。或者我可以只说这是我想要的格式,XSLT 需要能够生成它。请阅读我包含的第一个链接(HTML:包括或排除可选的闭合标签?)。 - Ian Boydhtml
,它不会生成</BR>
。 - porges</TD>
。 - Ian Boydxsl:copy
(例如,在“标识转换”中)即使对于空元素也会产生开头和结尾标签。因此,对于空元素,您必须添加一个使用xls:element
复制这些元素的模板。 - user357812