2012-02-10 93 views
1

我有一个XML序列化类的复杂图表,我可以(de)序列化到硬盘就好了。但是我如何处理巨大的变化到图模式结构?是否有一些机制来处理XML模式升级?有些类允许我将旧数据迁移到新格式?XML(de)序列化和模式升级

当然我可以使用XmlReader/XmlWriter,遍历每个节点和属性并编写几千行代码将数据转换为新格式,但也许有更好的方法?


我发现Object graph serialization in .NET and code version upgrades,但我不认为当有模式的重大变化所链接的条款适用。

回答

2

您可以使用XSLT,而不用编写几千行代码来使用XmlReader/XmlWriter转换文件。我们仍在谈论数百行代码,并且执行速度可能更慢,但如果您擅长XSLT,则可以更快地完成它。

另一种方法是构建一个连接旧类和新类的C#程序(当然,您需要重命名旧类以避免命名冲突)。该程序将从磁盘加载OldMyClass,从其属性值构造NewMyClass,并将NewMyClass序列化到磁盘。从本质上讲,这种方法将转换任务转移到C#领域,这可能会让您更加熟悉。

+0

+1谢谢,XSLT看起来很有希望。但根据http://stackoverflow.com/questions/1525299/xpath-and-xslt-2-0-for-net看来XSLT 2.0尚未在.NET中实现。由于XSLT 1.0已经快13年了,我想知道它是否足够强大,可以处理复杂的变化。 – Paya 2012-02-10 14:55:00

+0

@Paja由于这是一次性交易,您不需要.NET实现:使用任何可以从命令行运行的XSLT引擎。为引擎提供你的“脚本”和你的数据,并保存它产生的输出。我使用了[Saxon](http://www.perfectxml.com/SoftDetails.asp?id=193),但它在11年前就已经很长了;自那时起,更新的引擎就被编写出来了,你可能想在选择一个任务之前做一些研究。无可否认,编写XSLT的学习曲线相对较为陡峭,但一旦您完成了初步的工作,您将能够非常快速地编写大量复杂的转换。 – dasblinkenlight 2012-02-10 15:03:23

+0

我正在为最终用户编写一个程序,因此需要随迁移算法一起分发。正因为如此,直接在.NET框架中的实现将非常棒,因为我不喜欢使用额外的大型库来扩展我的设置。 – Paya 2012-02-10 15:10:54

0

在这种情况下,我把我的变化,我的对象,并通过XmlSerializer的重建我的XML:http://support.microsoft.com/kb/815813

有了这个,我加载和保存基于我的目标新的XML模式。