我想将一些xml转换为具有以下格式的 HTML: TR TD col1 TD col2 TD col3 / TR 注意:输出是HTML,完整,省略了可选的结束标记.这是问题,也是问题存在的原因. 我正在使用的XSL片段是: ?xml version='
< TR>< TD> col1< TD> col2< TD> col3< / TR>
注意:输出是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形式)时,我得到了一个非常好的错误:
End tag ‘TR’ does not match the start tag ‘TD’.
这很有道理.确实:
<TD><xsl:value-of select="Column3"/> </TR>
我在关闭TR之前不关闭TD元素.所以问题是:
如果HTML不是xml,我如何将xml转换为HTML?
也可以看看
> HTML: Include, or exclude, optional closing tags?
> XSLT: Transforming into non-xml content?
> Omitting optional tags of html
更新一个
它有been suggested,无论如何都可以简单地包含结束标签,以便进行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>
我如何包含< BR>我的HTML输出中的元素,因为在HTML中禁止关闭< BR>元件.
这是一种方法:<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text"/> <xsl:template match="/*"> <TR><TD><xsl:value-of select="col1"/><TD><xsl:value-of select="col2"/><TD><xsl:value-of select="col3"/></TR> </xsl:template> </xsl:stylesheet>
将此转换应用于以下XML文档时:
<t> <col1>1</col1> <col2>2</col2> <col3>3</col3> </t>
想要的结果是正确生成的:
<TR><TD>1<TD>2<TD>3</TR>