2

我有一个大小从 50k 到大约 300k 的 XML,我需要对其进行一些转换。转换包括将一些元素移动到不同的位置以及在不同元素的属性之间进行合并。

据我所知,理想情况下我应该使用 XSLT 来执行这种转换,但我担心它会给我带来大量不必要的工作来构建输出 XSL,因为与完全保持的数据量相比,所需更改的数量可以忽略不计相同。

我的问题:

  1. 您是否建议尝试仅使用 DOM 功能(我在 .net 3.5 中工作)和一些 XPATH 来执行此操作?缩小规模是,如果所需更改的数量增加,可能会给代码增加不必要的复杂性。

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

谢谢!

4

1 回答 1

0

很好的问题。

当您只想对文档进行非常小的更改时,XSLT 的成本确实很高。如果您想要进行大量迭代转换,则成本尤其明显,这有时会发生在优化用例中,其中每个转换都会创建一个数据集,而该数据集对前一个转换是一个小的改进。

然而,在许多情况下,进行小型转换的成本主要是解析和序列化成本(将词法 XML 转换为树并返回),因此也涉及解析和序列化的其他方法(例如 DOM 更新或 XQuery 更新)是不会更好。因此,在回答您的问题 1 时,我认为使用 DOM 不会更好。实现改进的唯一真正方法是使用 XML 数据库,它允许您避免解析和序列化成本,因为文档现在以树形而不是词法形式永久保存。

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

于 2012-07-18T10:52:45.177 回答