我想将一些 xml 转换为具有以下格式的 HTML:
col1 col2 强> col3
注意:输出为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>
我没有关闭 TD
关闭 TR
之前的元素.所以问题是:
我如何转换 xml
进入HTML
,鉴于 HTML
不是 xml
?
另见
- 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>
关于html - 将 XML 转换为 HTML(相对于 xhtml),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3145817/