【问题标题】:Handle XML Schema changes without code changes无需更改代码即可处理 XML Schema 更改
【发布时间】:2012-06-11 18:47:47
【问题描述】:

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

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

这行得通吗?

【问题讨论】:

    标签: c# xsd linq-to-xml linq-to-xsd


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 1970-01-01
          • 2013-10-05
          • 2017-10-15
          • 1970-01-01
          相关资源
          最近更新 更多