0

目前我们有一个 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 并根据 Mapping 配置生成插入语句

如果架构发生变化并且添加了新元素说价格,我们会将该价格添加到映射中,因此生成的新插入语句包括价格。

这行得通吗?

4

3 回答 3

1

立即想到的处理此类事情的方法是拥有一个已知的良好骨架 XML 模式,其中没有数据,让代码解析并学习该模式,然后让它在您提供的任何任意输入上运行。当 XML 模式更改时,只需让受信任的用户/管理员进入并更改已知良好的框架。

您应该确保您的数据库可以在没有任何额外刺激的情况下处理这些更改,并且您绝对应该至少有一些定期运行的测试,并在检测到问题时发出警报。像这样的“低维护”过程中最危险的因素之一是它们经常悄悄地失败,而且没有办法告诉它们已经坏了!

我有点担心我没有得到您的全部问题,因为您添加了一堆显然不在您的问题中的标签,但希望这会有所帮助。

于 2012-06-11T18:52:48.290 回答
1

如果 XML 数据的位置发生变化,除非您想从 XML 文件中抽象出废话(在文档中包含描述查找内容的元数据),否则您就不走运了。如果您的数据元素总是在同一个地方,您所要做的就是将您的 XSD 文件保存为一个单独的文件,并在必要时更改它以验证文档。

于 2012-06-11T18:53:13.380 回答
1

我讨厌解析 XML 并将其加载到对象中。因此,您可以尝试以下方法。

创建一个表示您正在讨论的 XML 数据的 C# 对象。序列化那个 C# 类,并且中提琴你有一个强类型的 XML 模式。此外,如果将来您需要额外的架构更改,只需修改 C# 类并重新序列化即可。

这也消除了解析 XML 文档的需要(假设您在 CLR 中使用它),因为您可以简单地引用 C# 类,并且无需任何解析即可将其反序列化回内存中。

于 2012-06-11T19:39:29.550 回答