Jus*_*tin 5 c# xml schema xsd xmldocument
我有一个应用程序,它以基于Xml的格式保存文档(想想word文档) - 目前从xsd文件生成的C#类用于读取/写入文档格式,直到最近我必须更改格式该文件.我担心的是后向兼容性,因为我的应用程序的未来版本 需要能够读取所有以前版本保存的文档,理想情况下我还希望我的应用程序的旧版本能够优雅地处理阅读未来版本的应用程序保存的文档.
例如,假设我更改了我的文档的模式以在某处添加(可选的)额外元素,那么我的应用程序的旧版本将忽略额外的元素并且不会出现问题:
<doc>
<!-- Existing document -->
<myElement>Hello World!</myElement>
</doc>
Run Code Online (Sandbox Code Playgroud)
但是,如果进行了重大更改(例如,将属性更改为元素或元素集合),那么我的应用程序的过去版本应该忽略此元素(如果它是可选的),或者通知用户他们正在尝试请阅读使用我的应用程序的较新版本保存的文档.此外,这使我头疼,因为我的应用程序的所有未来版本需要完全单独的代码才能阅读两个不同的文档.
这种变化的一个例子是以下xml:
<doc>
<!-- Existing document -->
<someElement contents="12" />
</doc>
Run Code Online (Sandbox Code Playgroud)
改为:
<doc>
<!-- Existing document -->
<someElement>
<contents>12</contents>
<contents>13</contents>
</someElement>
</doc>
Run Code Online (Sandbox Code Playgroud)
为了防止将来出现支持问题,我想提出一个合适的策略来处理我将来可能做出的更改,以便我现在发布的应用程序版本能够应对这些变化.未来:
另外,我假设我所做的所有改变都可以分为"喙变化"和"不间断的变化"这两类,我已经非常松散地工作了所有这些,但我并不完全相信这是一个安全的假设制作.
请注意,我非常宽松地使用术语"文档" - 内容根本不像文档!
感谢您提供给我的任何建议.
您肯定需要 XML 文件中的版本号,我建议不要将其与应用程序的版本绑定,因为它实际上是一个单独的实体。您可能会使用应用程序的两个或三个版本而无需更改 XML 格式,或者您可能会在单个版本的开发过程中多次更改格式。
如果您希望旧版本的应用程序能够读取新版本的 XML 文件,那么您永远不能删除元素或更改它们的名称。您始终可以添加元素,旧代码会很乐意忽略它们(XML 的优秀功能之一),但如果删除它们,则旧代码将无法运行。
正如 Ishmael 所说,XSLT 是将 XML 格式从一个版本转换为另一个版本的好方法,这样您就不会在源代码中遇到一大堆解析例程。