我有以下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
答案 0 :(得分:1)
使用Process Monitor诊断问题,重点关注非成功结果,我看到找不到Common.xsl
。 Opera查找文件的路径不包含Transformations
文件夹。
这引导我进入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
。