3

在我的 tomcat 上,我在这个地址有一个 servlet:http://192.168.1.2/FirstApp/TestXslServlet它生成以下 XML:

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type="text/xsl" href="./TestBean.xsl"?>

<TheRoot>
    <hw>Hello World!</hw>
</TheRoot>

我在这里有 xsl:http://192.168.1.2/FirstApp/TestBean.xsl 其中包含以下文本:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/TheRoot">
  <html>
  <body>
  <h2>XSL loaded!</h2>
  <table border="1">
    <tr bgcolor="#9acd32">
      <th><xsl:value-of select="hw"/></th>
    </tr>
  </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

当我加载 servlet 时,我看到的只是“Hello World!”,这与我是否完全删除 xsl 或者如果我输入了一个虚拟 xsl 名称相同,所以加载它似乎存在一些问题。为什么?

当我在这个网站上测试它们时,XML 和 XSL 都应该是正确的:http: //markbucayan.appspot.com/xslt/index.html并且转换按预期进行。

编辑:它似乎在资源管理器上工作,但不在 Firefox 上,所以问题与浏览器有关。

EDIT2:我尝试从 firefox 下载这两个文件以在本地测试它们,servled 下载为TestXslServlet.xml,xsl 下载为TestBean.xsl.xml. 我重命名了 xsl,删除了“.xml”扩展名,现在从本地磁盘上它工作正常。如果我在服务器上重新加载页面,我试图查看 firefox 开发人员控制台是否可以揭示正在发生的事情:

[11:01:39.325] GET http://192.168.1.2/FirstApp/TestXslServlet [HTTP/1.1 200 OK 32ms]

如果我从本地磁盘重新加载页面,我会得到:

[11:04:00.507] file:///C:/[...]/xsltest/TestBean.xsl

TestBean.xsl 的 MIME 类型在从服务器加载时为“application/xml”,从磁盘加载时为“text/xml”。我尝试将在本地工作的完全相同的文件上传到服务器,但它们不起作用(不同之处在于我现在调用静态TestXslServlet.xml而不是 servlet 来生成 xml,MIME 类型是“application/xml” , 至于 servlet)。

EDIT3:为了排除我的任何错误,我尝试使用此处提供的示例文件:https ://developer.mozilla.org/en-US/docs/XSLT_in_Gecko/Basic_Example从本地加载页面时加载正常磁盘,但从服务器加载时不应用转换。似乎是 firefox(v.25) 和 tomcat(v.7) 的问题,但是 MIME 类型对我来说似乎是正确的,从 firefox 的“页面信息”显示两者的“应用程序/xml”(从服务器加载时) ,从本地磁盘加载时没有 MIME 类型信息)。

4

2 回答 2

2

我在这里找到了答案:Firefox 3 doesn't apply my xslt stylesheet, but other browsers do

Firefox 的“NoScript”插件可防止 XSL 转换...

于 2013-11-09T11:37:07.190 回答
2

您的 XML 确实格式正确,并且当正确调用时,您的 XSLT 确实可以运行。

我猜您的 Tomcat 服务器正在为具有非 XML MIME 类型的 FirstApp/TestXslServlet 提供服务。如果您希望浏览器在 Web 资源上运行相关的 XSLT 样式表,那么您希望它以 text/xml 或 application/xml 的形式提供(许多权威人士更喜欢后者,这表明他们认为 XML 不是人类可读的文本;我更喜欢前者),或者浏览器识别为 XML 并为其调用的其他 MIME 类型浏览器 XML 解析器和 XSLT 处理器[感谢 LarsH 发现错字]。猜测一下,您的配置默认将您的 servlet 输出作为 text/html 提供。

于 2013-11-09T01:32:06.867 回答