将XML转换为HTML(而不是xhtml)

Ian*_*oyd 5 html xml xslt html4

我想将一些xml转换为具有以下格式的HTML:

<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>
Run Code Online (Sandbox Code Playgroud)

您可以看到XSL的内容与我想要的HTML匹配(为便于阅读而包装):

<TR>  <TD><xsl:value-of select="Column1"/>
      <TD><xsl:value-of select="Column2"/>
      <TD><xsl:value-of select="Column3"/> </TR>
Run Code Online (Sandbox Code Playgroud)

注意:那些知道我从XSLT得到的错误的人:希望已经知道答案.

当我提出我的XSL(其中,不要忘记,是一种形式xml)时,我得到了一个非常好的错误:

结束标记"TR"与起始标记"TD"不匹配.

这很有道理.确实:

<TD><xsl:value-of select="Column3"/> </TR>
Run Code Online (Sandbox Code Playgroud)

关闭TD之前我不会关闭元素TR.所以问题是:

如果不是,我怎么能xml变成?HTMLHTMLxml

也可以看看


更新一个

被认为是一个可以简单地包括结束标记无论如何,为了使XSL的validate(显示包裹,方便阅读):

<TR>    <TD><xsl:value-of select="col1"/></TD>
        <TD><xsl:value-of select="col2"/></TD>
        <TD><xsl:value-of select="col3"/></TD>   </TR>
Run Code Online (Sandbox Code Playgroud)

然后,通过使用xsl:output method='html',最终的HTML内容将</TD>神奇地省略标签.除非它不起作用:

<TR><TD>col1</TD><TD>col2</TD><TD>col3</TD></TR>
Run Code Online (Sandbox Code Playgroud)

更新两个

有人建议我放弃,不要再问这个问题,只包括可选的结束标签.这是可能的,但这不是我的问题.此外," 解决方案 "不适用于禁止结束标记的元素,例如:

<BR/>
Run Code Online (Sandbox Code Playgroud)

要么

<BR></BR>
Run Code Online (Sandbox Code Playgroud)

如果<BR>在HTML中禁止关闭元素,我将如何在HTML输出中包含一个<BR>元素.

Dim*_*hev 2

这是执行此操作的一种方法

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/*">
   &lt;TR>&lt;TD><xsl:value-of select="col1"/>&lt;TD><xsl:value-of select="col2"/>&lt;TD><xsl:value-of select="col3"/>&lt;/TR>
 </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

当此转换应用于以下 XML 文档时

<t>
 <col1>1</col1>
 <col2>2</col2>
 <col3>3</col3>
</t>
Run Code Online (Sandbox Code Playgroud)

正确产生了想要的结果:

   <TR><TD>1<TD>2<TD>3</TR>
Run Code Online (Sandbox Code Playgroud)