目前我们有一个XML模式,代码读取xml文件,根据模式进行验证并保存到数据库。将来会有架构更改,代码如何处理它们而无需为新架构重写代码。
谢谢
我举个例子
<Products>
<product id="1">
<name> ABC </name>
<desc> good one </desc>
</product>
</products>
XPath 映射配置
Table Column XPath
Product id //Products/product/id
Product name //Products/product/name
Product desc //Products/product/desc
现在,C# 代码读取 id、name 和 desc,并根据映射配置生成插入语句
如果模式更改并添加了新元素,则说价格,我们会将该价格添加到映射中,因此生成的新插入语句包括价格。
这行得通吗?
我讨厌解析XML并将其加载到对象中。因此,您可以尝试以下方法。
创建一个表示您正在谈论的 XML 数据的 C# 对象。序列化该 C# 类,并具有强类型的 XML 架构。此外,如果将来需要其他架构更改,只需修改 C# 类并重新序列化即可。
这也消除了分析 XML 文档的需要(假设您在 CLR 中使用它),因为您只需引用 C# 类,就可以将其反序列化回内存而无需任何分析。
立即想到的处理此类事情的方法是拥有一个已知良好的框架 XML 模式,其中没有数据,让代码解析并学习该架构,然后让它在你给它的任何任意输入上运行。 当 XML 架构发生更改时,只需让受信任的用户/管理员进入并更改已知良好的框架即可。
您应该确保您的数据库可以在没有任何额外提示的情况下处理这些更改,并且您绝对应该至少有一些定期运行的测试,并在检测到问题时引发警报。 在这样的"低维护"过程中,最危险的因素之一是它们经常悄无声息地失效,而且无法判断它们是否损坏!
我有点担心我没有得到你的整个问题,因为你添加了一堆标签,这些标签显然不在你的问题中,但希望这有所帮助。
数据的位置发生变化,除非您想从 XML 文件中抽象出废话(在描述在哪里查找内容的文档中包括元数据),否则您就不走运了。 如果数据元素始终位于同一位置,则只需将 XSD 文件保留为单独的文件,并在必要时进行更改以验证文档。