XML和XSL转换

时间:2013-11-09 00:22:09

标签: xml firefox xslt tomcat7

在我的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下载这两个文件,在本地测试它们,服务器下载为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的“页面信息”它显示两者的“application / xml”(从服务器加载时) ,从本地磁盘加载时没有MIME类型信息。)

2 个答案:

答案 0 :(得分:2)

您的XML确实格式正确,并且在正确调用时,您的XSLT会运行。

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

答案 1 :(得分:2)

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

firefox的“NoScript”插件会阻止XSL Trasformation ...