【问题标题】:Rendering xhtml compliant pages with XSLT won't render correctly past inline javascript block使用 XSLT 呈现与 xhtml 兼容的页面将无法通过内联 javascript 块正确呈现
【发布时间】:2011-03-16 22:41:51
【问题描述】:

我目前正在更新(很多)旧的 xsl+html 代码以呈现符合 xhtml 的代码,但遇到了页面包含内联 javascript 的问题。一些 javascript 可以从内联中删除并放入链接的 js 文件中。

但是,在 javascript 中有很多地方使用了 xsl 元素。

在浏览器中查看输出时,呈现似乎停止在源代码中出现 javascript 的位置(源代码生成良好)。

我已经尝试了围绕这些 javascript 块的所有常用 CDATA 和 xsl:comment hack,但结果仍然相同。

对此的任何帮助将不胜感激。请询问您是否需要更多信息。

【问题讨论】:

  • 你能粘贴一些示例代码吗?
  • 能否提供一个小例子:XML doc., XSLT, 结果和错误解释)?
  • 在搜索框中输入“[xslt] [javascript]”。你会得到:stackoverflow.com/questions/435005/…stackoverflow.com/questions/3035058/… 甚至更多。如果这些没有解决您的问题,请询问输入样本和所需的输出
  • 您将 XSLT 转换的结果作为 text/html 还是 application/xhtml+xml 提供?如果您作为 text/html 服务,那么您应该遵循w3.org/TR/xhtml1/#guidelines 中的规则,而且我不知道有任何 XSLT 1.0 处理器支持以这种方式输出 XHTML。 XSLT 2.0 有一个输出方法“xhtml”,它有助于输出带有 XSLT 样式表的 XHTML 并将输出作为 text/html 提供。

标签: javascript xslt xhtml


【解决方案1】:

在(强制)中断此任务后,我重新访问并发现了阻止浏览器正确呈现内容的错误。 XSL 错误地将 iframe 和脚本元素输出为自闭合标记。为了防止这种情况发生,我使用<xsl:text> </xsl:text> 强制在元素中添加一些空格。

感谢您的帮助和建议。

【讨论】:

    【解决方案2】:

    尝试通过 XML 验证器运行转换后的页面。这至少会告诉您它是否符合 XML 或浏览器兼容性问题。如果没有看到转换后的代码,就很难诊断出发生了什么。您的问题可能与 Javascript 错误或无效 XML 有关。此外,浏览器本身可能会增量处理 XSLT 并进行渲染,因为您没有指定转换是在渲染之前完成还是作为渲染的一部分完成。到达底部的最好方法是将碎片拉开。通过兼容的 XSLT 处理器运行 XSLT 以确保 XSLT 有效。然后通过 XML 验证器运行其输出,以确保您没有收到任何 XML 验证错误。最后,通过 XHTML 验证器运行 XSLT 输出。如果所有这些步骤都成功,那么您可能会遇到像 Javascript 错误这样简单的问题。

    【讨论】:

    • 非常感谢。您为我的故障排除添加了一些额外的步骤。一旦我选择了更多,我会回复你的。令我困惑的是,在 html 代码和 xsl 指令中添加 xhtml 标头之前,所有页面都正确呈现。我可以告诉你,转换是在服务器端完成的,并完整地传递给浏览器。我会试着举一个例子来更好地解释这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多