我正在从事一个使用以下技术的项目。Java、XML、XSL
大量使用XML。我经常需要在应用某些业务逻辑后将一个XML文档转换为另一个。
所有内容都将构建到EAR中,并部署到应用程序服务器上。由于用户数量巨大,我需要在定义编码标准之前考虑性能。
我不是一个非常喜欢XSL的人,但我想知道在这种情况下使用XSL是更好的选择,还是应该只使用Java。请注意,我只需要将XML转换为XML格式。我不需要将XML转换为其他格式,如HTML等。
从性能和可维护性的角度来看- JAVA不是比使用XLST进行XML到XML转换更好的选择吗?
发布于 2011-09-10 07:22:04
根据我以前使用这类应用程序的经验,如果您有性能瓶颈,那么它不会是XSLT处理。(唯一的例外可能是处理非常复杂,并且程序员在XSLT方面非常缺乏经验。)如果您正在处理大型文档,则在XML解析或序列化方面可能存在性能瓶颈,但这些将应用您用于转换的任何技术。
在XSLT中编写简单的转换要比在Java中简单得多。复杂的转换通常也更易于用XSLT编写代码,除非它们大量使用Java类库中免费提供的功能(例如日期解析)。当然,这只适用于同样熟悉两种语言编码的人。
当然,在你开始谈论具体的数字之前,你不可能给出任何关于性能的挥舞手臂的建议。
发布于 2011-09-10 08:08:54
我同意上面的回答。与在Java中执行转换相比,XSLT开发起来更快、更简洁。您可以更改XSLT,而不必重新编译整个应用程序(只需重新创建EAR并重新部署)。手动转换应该总是更快,但由于XPATH和其他允许非常简洁和强大的表达式的技术,代码可能比XSLT大得多。尝试几种XSLT引擎(java提供、saxon、xalan...)并尝试调试和分析XSLT,使用独立的IDE Altova XMLSpy等工具来检测瓶颈。尝试加载XSLT转换,并在处理需要相同转换的多个XML时重用它。另一种选择是将XSLT编译为Java类,从而实现更快的解析(saxon似乎允许这样做),但是更改并不像需要重新编译XSLT和生成的类那样简单。
我们使用XSLT和XSL-FO为计费软件生成发票。我们从数据库中提取数据并创建一个XML文件,使用XSL-FO对其进行XSLT转换,然后处理结果XML (FO指令)以使用Apache FOP生成PDF。当生成多页发票时,在多用户环境中基于用户请求(在线处理)在不到一秒的时间内完成作业。我们还可以进行批处理(计费周期),并且通过重用XSLT转换可以更快地完成这项工作。只有对于非常大的PDF文档(>100页),我们有一些麻烦(分钟),但最昂贵的任务总是处理XML与FO到PDF,而不是XML到XML与XSLT。
正如人们常说的,如果您需要更多的处理能力,您只需“添加”更多的处理器,并轻松地并行完成这些工作。我认为,如果您有使用XSLT的经验,那么使用XSLT节省的时间可以用来购买更多的硬件。它是使用强大的开发工具来节省开发时间和购买更多硬件或“手动”完成工作以获得最大性能的二分法。
像ESB这样的集成工具在很大程度上基于XSLT转换,可以将XML数据从一个系统(发送方)适配到另一个系统(接收方),并且通常可以在一秒钟内执行数百个“事务”(数据处理和集成)。
发布于 2011-09-10 06:20:04
如果您使用现代的XSLT处理器,比如Saxon (免费版本),您会发现性能相当不错。而且,从长远来看,XSL转换将比硬编码的Java类更易于维护。
(我与Saxon的作者没有任何联系)
https://stackoverflow.com/questions/7367747
复制相似问题