【问题标题】:Style sheet for XML not rendering in IE9XML 的样式表未在 IE9 中呈现
【发布时间】:2012-01-04 14:11:01
【问题描述】:

我有一个 xml 文档,现在在 IE9 上什至无法识别为 xml。我尝试添加正确的 xmlns:xsl 属性,它也有一个以

开头的正确标题
<?xml version="1.0" encoding="UTF-8"?>

此 xml 在 IE 6 7 8 中完美呈现,但在 IE9 中不起作用。 我不确定这是否是与 Quirks 模式相关的问题,如果是,我不确定什么 DOCTYPE 应该用于 XML 文档。 任何帮助将不胜感激。 以下是 XML 文档的前几行。

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/mobiledoc/jsp/empi/master/CCD.xsl" ?>
<ClinicalDocument xmlns="urn:hl7-org:v3" 
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                  xmlns:sdtc="urn:hl7-org:sdtc" 
                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                  xsi:schemaLocation="urn:hl7-org:v3 http://xreg2.nist.gov:8080/hitspValidation/schema/cdar2c32/infrastructure/cda/C32_CDA.xsd" 
                  classCode="DOCCLIN" 
                  moodCode="EVN">

【问题讨论】:

  • 考虑发布一个可以访问问题的 URL。或者考虑发布足够的信息,以便我们重现问题,特别是最小但完整的 XSLT 和 XML 示例,以及有关如何将 XML 提供给浏览器的详细信息,无论是通过 HTTP 还是提供 XML 的 Content-Type。
  • 如果您需要更多信息然后询问,为什么要投反对票?
  • @MartinHonnen Martin 我试图在 SO 中发布 XML,但我在这里没有找到“附加”选项。我无法复制和粘贴 XML,因为它很大。我没有可以托管它的网络服务器。
  • @MartinHonnen 对您的另一个问题的回答是,是的,它是通过 JSP 通过 HTTP 提供的。内容类型是text/xml,我会尽快贴出更多代码
  • @MartinHonnen 我已将文件上传到 cynosuredev.com/CCDTest.xml 通过将 URL 粘贴到 IE 中,您将看到它在任何版本

标签: xml xslt internet-explorer-9 stylesheet


【解决方案1】:

您能否更具体地说明它是如何“在 IE9 上甚至不被识别为 xml”?您是否收到错误消息,或者仅仅是它在 IE9 中的外观与以前的版本不同?

您的 XML 文件所做的第一件事是将自身与位于“/mobiledoc/jsp/empi/master/CCD.xsl”的 XSLT 样式表相关联,因此这可能是您的问题的根源。一些建议:

  • 作为测试,删除&lt;?xml-stylesheet .. ?&gt; 位。您现在在所有浏览器中都获得相同的行为吗? (可能只是 XML 文件的分层视图)如果是这样,那么问题出在您的 XSLT 样式表中。

  • 那个样式表有什么作用?如果它将 XML 文件转换为 HTML,它可能使用了一些不符合标准的 (X)HTML 结构或样式,旧版本的 IE 允许,但 IE9 更严格。如果“无法识别”是一些布局/显示问题,调整样式表可能会修复您在浏览器中看到的内容。

根据您到目前为止告诉我们的内容,我认为这可能是您需要开始的地方。

ETA:以下对话的结果是 &lt;xsl:output&gt; 指令强制将 4.01 HTML 文档类型输入输出;将其更改为 &lt;xsl:output method="html"/&gt;(并修复了转换的其他几个问题)修复了 IE9 中的问题。

【讨论】:

  • “无法识别”表示 xml 在浏览器中打开为文本(所有文本无标签)。它既不呈现样式,也不像 IE 那样显示 XML 层次结构。是的,我们正在将 XML 转换为 HTML,假设您提出的第二点是有没有办法让 IE9 不那么严格?
  • 显然,IE9 不会在远程服务器上处理 XSL,尽管看起来好像您有到 xsl 的相对链接,所以应该没问题。它只显示文本的事实听起来好像它正在尝试使用样式表处理 XML,否则您会看到标签。在没有看到代码的情况下,我只能建议用一个非常基本的 XSL 样式表测试相同的 XML,然后逐渐重建样式表,看看哪一点会破坏 IE9 显示(或者你是否可以让它工作)。
  • 抱歉回复晚了。我已将文件上传到cynosuredev.com/CCDTest.xml 通过粘贴 URL,您将看到它在任何版本
  • 谢谢。样式表有错误:您需要将变量patientRole 移动到n1:ClinicalDocument 模板的顶部。这不是您的 IE9 问题的原因,但它导致我机器上的 Oxygen XML 编辑器和 Firefox 出现错误。您还需要使用 XSL 扩展来保存样式表。这适用于我的带有 IE9 和 XAMPP 的机器,所以应该没问题。无论如何,在那之后,我设法通过修改样式表顶部的&lt;xsl:output&gt; 行使其在IE9 中工作,使其仅显示为&lt;xsl:output method="html"/&gt; - 我现在在IE9 中看到一个带有蓝色和红色标题的表格。 HTH!
【解决方案2】:

我很高兴问题已得到解决 - 在这种特殊情况下是这样。
但是 IE9 中错误的真正原因尚未披露,所以我将在此处进行说明。

遇到这种行为的原因是 IE9 中的 XSLT 处理存在错误

好吧 - 这不是一个真正的错误,只是糟糕的错误报告。关键是 IE9 默认应用 MSXML6,而 MSXML4 发生了很多变化。当 XSLT 中出现明显错误时,不会报告 - IE9 似乎会跳过对默认 text() 模板的处理,这会导致显示所有文本节点。
更糟糕的是,当在 MSXML6 中默认禁止的 XSLT 中执行某些操作时,会发生同样的事情。那么 MSXML6 中默认禁止的是什么?很多!例如应用 Jscript。还有DTD。并且 document() 函数将不起作用。

在上述情况下,人们可能会从显示的文本(显然来自应用默认模板)中怀疑 xslt 中存在错误 - 等待使用好的工具来发现。但是,当打开的文件的 xml 部分中没有文本时(也就是说,当 xslt 本身提供所有要处理的数据时,例如通过在运行时导入 xml 文件,或者xslt 处理的 xml 中的数据都在属性和节点名中)。你只需要知道...

如果您通过按 F12(或从“工具”菜单中选择它)转到开发人员工具,您可以自己查看所有这些背后的错误消息。在开发人员工具子屏幕中,选择脚本菜单并立即加载您的页面。您会在控制台的右侧看到一条错误消息:
XSLT8690: XSLT processing failed.
出现此错误时,仅显示 xml 中的文本节点(因此,对于空的 xml 根节点,页面将为空白)。
我在网上只能找到一个关于此错误的参考:http://www.wikistep.org/bugzilla/show_bug.cgi?id=4140

请注意,当您通过单击刷新按钮旁边的撕裂页面按钮选择“兼容性视图”时(并不总是可用,另一个 -minor- IE9 错误),页面返回 IE8 显示,并且可以再次 - 当然,除了 xslt 中的任何错误,但 MSXML 4.0 没有 MSXML 6.0 默认情况下具有的所有这些限制。当然,它更安全,但也很烦人。

请注意,通过选择兼容性视图,文件网址的站点部分将添加到自动应用兼容性视图的站点列表中。
要重现此问题,您必须从该列表中删除该站点,方法是按 Alt 打开菜单,选择工具/兼容性视图设置,然后从列表中删除该站点,然后重试。
另请注意,应用兼容性视图的技巧并不总能解决问题:例如,当 xslt 调用包含 IE8 Jscript 版本中不可用的类的嵌入式 javascript 时,xslt 在兼容性视图中也会失败。

现在可以做些什么呢?实际上我不确定 - 值得另一个关于 SO 的问题!
默认情况下关闭的属性可以打开 - 但我看到的示例仅在一系列语句中的 DOM 对象中加载 XML 类型字符串时这样做 - 然后可以为新的 DOM 对象分配必要的属性之前加载字符串。
在这里,IE9 负责自动加载 XML 并加载 XSLT 来处理 XML。那么,在加载发生之前,我们到底可以在哪里设置 XML 加载属性呢?
我相信这需要时间 - 但我会发现的!

【讨论】:

    【解决方案3】:

    当您使用 xslt 函数 ex document('../_data/nav.xml')/page:nav | document('http://www.ok.kz/_data/nav.xml')/page:nav 时,如果它指向另一台服务器,它将不会呈现您的文档,没有解释,只是空白页或 xml 作为文本

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多