用XSLT输出html问题

时间:2009-05-27 08:24:35

标签: .net html xslt xhtml

问题是,我的XSLT-Transformation过程(由.NET调用)不会将HTML内容单独保留在XSLT文件中(不像x <img>标记那样符合xml标准而没有关闭斜线标志),所以我会得到如下错误:

<pre>System.Xml.Xsl.XslLoadException: XSLT-Compilererror. ---> System.Xml.XmlException:
The 'img'-Starttag in Line XY does'nt match with the Endtag of 'td'.</pre>

我该如何防止这种情况?

我希望XSLT处理器要么忽略所有不是“”元素的内容,要么只是让它识别有效的html标签..

我的XSL-Header看起来像这样(从C#复制,所以想象一下“不存在”:

"<xsl:stylesheet version=\"2.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" " +
"xmlns:html=\"http://www.w3.org/1999/xhtml\" xmlns=\"http://www.w3.org/1999/xhtml\" " +
"exclude-result-prefixes=\"html\">" +
"<xsl:output method=\"xhtml\" omit-xml-declaration=\"yes\" indent=\"yes\"/>" +
"<xsl:preserve-space elements=\"*\" />"

4 个答案:

答案 0 :(得分:2)

AFAIK没有办法解决这个问题。 XSLT XML的实现,XSLT文档的内容必须遵守XML标准才能编译。

修复HTML格式的XHTML。

答案 1 :(得分:1)

您必须在符合XSLT XML(仍然是有效的HTML)内部制作HTML,或者如果您确实必须使HTML不符合XML,请将HTML封装在CDATA块中。

例如:

<xsl:template .... >
    <![CDATA[
        <img src='...' >
    ]]>
</xsl:template>

请注意,这非常难看,您可能最好不要使HTML符合XML格式。

答案 2 :(得分:0)

你想输出什么? HTML或xhtml?您始终将xslt编写为有效的xml:

<img src="somepath" ... />

<img src="somepath{withvalues}" ... />

但你使用xsl:output来控制它;如果你想要html(即)那么你会使用:

<xsl:output method="html" ... />

(注意上面没有“x”) - 或者:

<xsl:output method="xml" ... />

AFAIK,“xhtml”不是xsl:output/@method的有效选项,因为它已被“xml”覆盖。如果指定xsl:output/@method取决于顶部元素(即它是否从<html>...</html>开始),您还应该注意微妙的默认行为。

答案 3 :(得分:0)

XHTML的名称是X暗示XML img标签或任何其他非闭合标签不符合XHTML严格标准。但是,为了轻松地从HTML转换到XHTML,可以使用几个级别的“严格”,其中一些不符合XML。

如果您将HTML重写为XHTML-strict,那么您将没有问题