问题是,我的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=\"*\" />"
答案 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,那么您将没有问题