转换失败,没有错误消息

时间:2014-07-16 14:20:47

标签: xml xslt opera

我有以下XML

<?xml version='1.0' ?>
<?xml-stylesheet type='text/xsl' href='Transformations\style.xsl'?>
<test>
</test>

并在Transformations子文件夹中的样式表style.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:include href="Common.xsl"/>
  <xsl:template match="/">
    <HTML DIR="LTR">
      <HEAD>
        <TITLE>Test</TITLE>
      </HEAD>
      <BODY>
        Just a test
      </BODY>
    </HTML>
  </xsl:template>
</xsl:stylesheet>

和common.xsl

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/> 
</xsl:stylesheet>

当我在Opera中打开XML时,它说

  

此文档包含无效的XSLT样式表。来自XSLT引擎的错误消息:

并且:后面没有其他错误消息。它适用于IE和Firefox。

问题是什么?

我已经尝试过查看Dragonfly和错误控制台,但没有任何内容。

版本信息:
歌剧12.17
Windows 7 SP1 x64

1 个答案:

答案 0 :(得分:1)

使用Process Monitor诊断问题,重点关注非成功结果,我看到找不到Common.xsl。 Opera查找文件的路径不包含Transformations文件夹。

Process Monitor Screenshot

这引导我进入XML中的样式表路径:

<?xml-stylesheet type='text/xsl' href='Transformations\style.xsl'?>

用斜杠替换反斜杠解决了问题:

<?xml-stylesheet type='text/xsl' href='Transformations/style.xsl'?>

问题似乎只适用于所包含的common.xsl。如果省略include,则转换仅适用于style.xsl,即使使用反斜杠也是如此。

正如@IanRoberts在评论中所提到的,Opera将href属性视为URI,并将Transformations\style.xsl替换(无效)文件名Common.xsl