【发布时间】:2010-09-15 14:03:56
【问题描述】:
这里是我的文件的链接XML、XSLT、Include XSLT
嗨
我正在将 xml 转换为 html。我的 xml 文件大约 10kb 大,我的 xslt 70kb 和输出 html 大约 10kb 大。
Transformer xformer = StylesheetCache.newTransformer(templateFile);
xformer.transform(new DOMSource(outlineDoc),new StreamResult(out));
创建转换器大约需要 10 秒来创建这就是为什么我创建了缓存,如果它被缓存则将其降低到 300 毫秒。转换线需要 3s 执行。现在这么长了。我在 windows mobile 上写过类似的转换,它的执行时间大约是
我将 TransformerFactory 更改为 Saxon,但结果大致相同。
谢谢
【问题讨论】:
-
对于一个 10k 的 XML 文件来说,这已经够多了。我的猜测是您的 XSLT 中有一些非常耗时的 XPath 查询。
-
对于 Saxon,我认为 Michael Kay 总是指出,如果您追求性能,您应该使用 Saxon 的树表示,而不是 DOM 树作为输入。我不知道您是否已经有一个 DOM 树并需要对其进行转换,或者您是否只构建了该 DOM 来为 XSLT 提供输入,在后一种情况下,让 Saxon 通过提供 StreamSource 或 SAXSource 来选择它的树模型。至于改进 XSLT 代码,当然,如果您使用 Saxon 9,那么请确保您利用了 XSLT 2.0 的功能,例如 for-each-group,并尽可能使用键来提高性能。
-
@Pintac:除了使用外部 DOM API 或 XSLT 处理器内置的树解析器外,如果您不提供样式表和输入示例,则无法判断这是否是因为不好转换模式,它使您的问题更适合
xsltprocessor标签。 -
我添加了指向 xslt 和 xml 的链接。
-
@Martin 我有一个 DOM 文档,我从文件中加载,然后稍作更改。