2010-02-03 122 views
4

我在当前项目中使用XML和XSLT,我想知道是否让浏览器使用样式表将XML呈现为HTML,而不是使用类似PHP xsltprocessor的东西。浏览器渲染XSLT vs PHP渲染XSLT

我使用浏览器xslt处理器的一个主要原因是允许API在不久的将来访问我的XML数据。所以我想要转换客户端,所以我的XML仍然可用。

我可能对PHP xsltprocessor错误,但是当通过PHP处理xml时,收到的数据是呈现的XML(在我的情况下是HTML),并且XML数据不再可用。是对的吗?

谢谢你清理一下。

回答

0

这一切都取决于你的最终目标是什么。我使用一个将报告生成为xml的应用程序,并将xml和xslt发送到浏览器进行处理。有这种方法的几个原因:

  • 因为你已经提到的,你可以在客户端上做进一步的处理
  • HTML相当冗长,如果你有指定你的XML的控制,你可以确保它不是因为最终你在服务器和浏览器之间发送了少量数据
  • xslt可以在浏览器上缓存,所以在第一次使用后不会开销
  • 做的服务器上的转换会为您的服务器增加负载,如果您有许多人试图同时访问该页面,则该负载可能会产生影响。

在某些情况下,我们在服务器上进行转换。例如我们转换为html表格,然后更改http内容类型以将结果作为excel发送。

1

我建议你在服务器端进行转换,因为你有更多的控制权。如果您依赖浏览器,则可能会在不同浏览器中的渲染引擎中看到细微的差异。如果您在服务器上进行转换并传递html,那么您可以通过指定要生成的html的确切内容,确保该html的静态版本看起来正确,然后处理XSLT以确保它生成html正确。

要在客户端获取XML,在部分转换中,您可以输出需要的XML部分(或整个DOM),并将其放入JavaScript变量或页面上可访问的某个位置。

我发现渲染客户端对于小型受控(例如内部)用途很好,但对于任何想要对输出服务器端进行严格控制的任何情况都更可靠。

+1

我必须承认,在使用浏览器XSLT渲染的每个主流浏览器中,我都遇到了一些麻烦。但总的来说,HTML是以相同的方式呈现的,所以我认为除了一些Javascript奇怪的行为之外,我仍然认为客户端转换并不是一个糟糕的决定。有没有任何浏览器根本不支持它? – 2010-02-03 20:29:44

+0

据我所知,所有的浏览器都支持它,但是你会遇到它们如何处理扩展函数或XSLT基础之外的任何差异。它可能会正常工作,但你不能真正看到最终用户的体验是什么,所以这取决于对你有多重要。 – 2010-02-03 20:33:15

1

如果你使用MVC模式设计应用程序,那么它就没有关系。您将能够通过API将HTML展示给常规浏览器和XML。

即使您在服务器端执行XSLT,在添加API时跳过该步也应该非常简单。

通常客户端的XSLT有很多缺点 - 高延迟,因为样式表和所有数据必须在之前完全加载完毕,任何开始呈现。使用普通的HTML,您可以获得更低的延迟(只有一个文件,流式传输),并且在HTML完成之前即可开始下载其他资源。

+0

所以我想它的高延迟与服务器运行时间有关。但是,如果该样式表被浏览器缓存呢? – 2010-02-03 20:36:02

+0

即使对样式表进行了缓存,您仍需等到XSLT开始生成页面之前下载完整的XML。除非你的XML比HTML小得多(比较gzipped size!),否则它仍然会变慢。 – Kornel 2010-02-04 02:57:14