我有一个大小在50k到300k之间的XML,我需要在其上进行一些转换。转换包括将一些元素移动到不同的位置并在不同元素的属性之间合并。
据我所知,理想情况下我应该使用XSLT来执行此转换,但我担心它会为构建输出XSL带来大量不必要的工作,因为所需的更改数量与数量相比可忽略不计数据保持完全相同。
我的问题:
你会建议尝试使用DOM技能(我在.net 3.5中工作)和一些XPATH来做这个原始的吗?缩小的大小是,如果所需更改的数量增加,则可能会增加代码的不必要的复杂性。
如果您仍然推荐XSLT,我是否可以通过某种方式从输入XML中复制块而不是从头开始重新创建它们?
谢谢!
答案 0 :(得分:0)
很棒的问题。
当您只想对文档进行非常小的更改时,XSLT确实很昂贵。如果你想进行大量的迭代转换,成本尤其明显,这有时会发生在优化用例中,其中每个转换都会创建一个比前一个转换小的改进的数据集。
然而,在许多情况下,进行小型转换的成本主要是解析和序列化成本(将词法XML转换为树和后面),因此其他方法(例如DOM更新或XQuery更新)也涉及解析和序列化不会更好。所以在回答你的问题1时,我不认为使用DOM会更好。实现改进的唯一真正方法是使用XML数据库,这样可以避免解析和序列化成本,因为文档现在以树形而不是词汇形式持久保存。
关于你的问题2,是的,你可以使用xsl:copy-of来复制文档的块,并且在任何体面的XSLT处理器上,这应该是非常有效的。当然,从源树到结果树执行此复制的成本可能远低于构造源树的解析成本或处理结果树的序列化成本。 (当然,实际结果会因XSLT处理器而异。)