如何将XML持久化到数据库?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (52)

我有一个从CSV文件或数据库导入信息并将其导出到XML的应用程序。此XML当前被保存到文件中。但是,由于项目需要,我决定最好将这个XML持久化到数据库中。

目前,我有CSV、XML和SQL存储库,它们处理导入/导出数据。XML存储库将传入对象保存到文件中。目前,它是存储对象到XML的映射的地方,因此它是唯一了解该结构的地方(同样,它们各自结构的其他存储库)。

既然我想将XML存储在数据库中,我就开始质疑这个体系结构。为了对数据库进行插入,XML的结构必须可以从SQL存储库中访问(其他列中的n.b数据可以与XML一起插入到DB中)。这让我想知道XML表示是否应该存储在对象本身、服务层或其他地方。

实现这个问题的解决方案的最佳方法是什么?

更新:对我问题的澄清。XML存储库当前保存到一个文件中。在我看来,这是将XML结构的知识保持在一个错误的水平上,因为那时我在将XML表示保持到我想要的任何介质方面没有灵活性。让对象了解它的XML表示(或CSV表示等)是否很糟糕?是否应该将有关该结构的知识保持在另一个层次,那又是什么层次呢?

提问于
用户回答回答于

如果你希望SQL存储库能够使用现有的XML层,那么我确信可以使用某种基于接口的抽象(Provider/IoC/DI/etc),这样SQL存储库就可以使用XML堆栈,而不必刻意的去了解它。

当然,如果对象模型本身定义了XML结构(通过XmlSerializer),这就更简单了,XML repo变得相当琐碎。

至于知道结构db:它取决于是否需要查询数据库中的数据。如果是这样的话,你可以在SQLServer中做很多事情--例如,可以将XML列绑定到xsd,或者可以将XML的一部分(通过UDF/XQuery)提升到持久化的索引列。但是,如果你是只是使用数据库进行存储,这是不必要的--实际上,如果你需要在以后的某个日期更改xsd,那么在数据库中使用xsd是一个主要的。

用户回答回答于

虽然许多数据库支持直接存储XML,但我认为你可以从经验上解决这个问题。如果模式更改,则需要将每条记录更新到新模式。

我建议,如果要将数据存储在DB中,那么将数据存储在一个更易于修改和管理的表中。

此外,你应该询问为什么要将数据存储在数据库中。如果你不打算查询数据,那么将其存储在一个平面文件中也同样好。

我并不是说你做的是错的,而是认真考虑你的需求。

用户回答回答于

您不只是将XML存储库更改为有SQL后端吗?Yopur的存储库究竟是什么并不重要,它们只是用来存储和检索数据的“黑匣子”。将XML知识保密在XML存储库中,并将其后端使用SQL。

您可以将其链接到SQL存储库,或者将其保持为单独的。

扫码关注云+社区

领取腾讯云代金券