【问题标题】:XSLT html output problem withXSLT html 输出问题
【发布时间】:2009-05-27 08:24:35
【问题描述】:

问题是,我的 XSLT-Transformation 过程(由 .NET 调用)不会将 HTML 内容单独留在 XSLT 文件中(这不像 <img> 没有右斜杠的标签那样符合 xml -sign ),所以我会收到如下错误:

<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-tags..

我的 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=\"*\" />"

【问题讨论】:

  • 有关信息 - 将 xslt 保存在文件或 resx 中要容易得多;在 C# 字符串中编写 xslt 很痛苦。

标签: .net html xslt xhtml


【解决方案1】:

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

将您的 HTML 修复为 XHTML 格式。

【讨论】:

  • 嗯,我不明白这一点... -标签没有关闭斜线是 XHTML1.0 兼容但同时与 xml-node 架构混淆...我的意思是,任何使用 XSLT 生成 HTML 的人都会遇到这个问题...
  • 不,未封闭的 img 元素在 xhtml 中永远无效;它必须是 或 ...
  • 一个未闭合的anything是无效的——只是空元素有两种实现闭合的方式。
  • 那是明智的答案..所以+1
【解决方案2】:

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

例如:

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

请注意,这非常难看,最好让 HTML 与 XML 兼容。

【讨论】:

  • CDATA 不会将标签呈现出来,它会呈现为“<img src='...'>”
  • 好点。我现在记得做了一些非常狡猾的输出转义来解决这个问题,但我清楚地阻止了它。
【解决方案3】:

你想输出什么? 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 取决于顶部元素(即它是否以&lt;html&gt;...&lt;/html&gt; 开头),您还应该注意微妙的默认行为。

【讨论】:

  • fwiw,xhtml 输出由 output="xml" 生成,并带有适当的 doctype-system 和 doctype-public 属性来修复类型
【解决方案4】:

XHTML 顾名思义就是 X 表示 XML img 标签或任何其他非封闭标签不符合 XHTML-strict。然而,为了从 HTML 到 XHTML 的轻松转换,可以使用多个“严格”级别,其中一些不兼容 XML。

如果你将你的 HTML 重写为 XHTML-strict 你不会有问题

【讨论】:

    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2010-10-26
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多