2012-07-18 37 views
2

我有一个大小从50k到大约300k的XML,我需要对其进行一些转换。转换包括将一些元素移动到不同的位置并合并不同元素的属性。当只需要对XML进行微不足道的更改时使用XSLT

对于我所知道的,理想情况下我应该使用XSLT来执行这种转换,但恐怕会造成构建输出XSL的大量不必要的工作,因为所需更改的数量与数量相比可以忽略不计数据保持完全一样。

我的问题:

  1. 你会建议您尝试做到这一点生只使用DOM能力(我在.NET 3.5的工作)和一些XPATH?缩小的尺寸是,如果所需更改的数量增加,则可能会增加代码的不必要的复杂性。

  2. 如果您仍然推荐XSLT,有没有某种方法可以从输入XML中复制块而不是从头重新创建它们?

谢谢!

回答

0

优秀的问题。

当您只想对文档进行非常小的更改时,XSLT确实很贵。如果您想进行大量的迭代转换,成本尤其明显,有时会发生在优化使用情况下,其中每个转换创建的数据集在前一个数据集上只有很小的改进。然而,在许多情况下,进行小型转换的成本主要是解析和序列化成本(将词法XML转换为树并返回),所以其他方法(例如DOM更新或XQuery更新)也涉及到解析和序列化不会更好。所以在回答你的问题1时,我不认为使用DOM会更好。实现改进的唯一真正方法是使用XML数据库,这样可以避免解析和序列化成本,因为文档现在以树形式而不是词法形式持久存在。

在你的问题2中,是的,你可以使用xsl:copy-of来改变文档块的大小,并且在任何体面的XSLT处理器上这应该是非常有效的。当然,从源码树到结果树的复制成本可能远远低于构建源树的解析成本或者处理结果树的序列化成本。 (实际结果当然会因XSLT处理器而异。)

相关问题