将(大)XML文件转换为关系SQL

时间:2012-01-25 08:42:03

标签: c# sql xml linq entity-framework

我的任务是导入一组XML文件,转换它们并将它们上传到SQL数据库,然后将它们重新转换为不同的XML格式。

XML文件相当大,有些复杂,所以我不确定最好的方法。我当然希望以某种方式自动化这个过程 - 并且实际上希望有一种实体框架式的解决方案。

我很擅长处理和处理.NET中的XML,所以我真的不知道我的选择是什么。我读过关于XSLT的内容,但在我看来,要成为一种我需要先学习的“语言”,这对我来说不是一个解决方案。

为了设置一些上下文,最终的解决方案实际上需要每周导入XML的新/更新版本,将新数据上传到sql,然后重新导出为另一种XML格式。

如果有人能给我任何关于如何进行的想法,我会非常感激。

我的第一个问题是使用类似XSD2DBXML SPY之类的东西来首先创建数据库结构,但我真的没有看到我当时应该如何继续。

事实上我很空白:)

2 个答案:

答案 0 :(得分:0)

XSLT是XML处理器用于将XML文档以一种格式转换为另一种格式的XML文档的语言。如果您不需要在数据库中存储数据,那么XSLT将是您的选择。

所有工具(如XSD2DB或XML SPY)都会为您创建一些数据库架构,但架构的质量将非常依赖于XML文档和XSD的质量(您是否有XSD,或者您是否要从示例XML生成它? )。生成的数据库可能不会对EF有用。

如果您有XSD,则可以使用Visual Studio附带的xsd.exe工具,并在.NET代码中生成表示XML文件数据的类。您将能够使用XmlSerializer将XML文档反序列化为生成的类。问题是像choice这样的一些XSD结构是以非常难看的方式在.NET代码中建模的。如果您的XML文件非常庞大,则另一个问题可能是性能,因为反序列化必须一次读取所有数据。最后一个问题可能是EF - 由XSD生成的类很可能无法用作实体,您将无法映射它们。

因此要么使用EF,在这种情况下,您必须分析XSD并创建自定义实体并映射到您自己设计的数据库,您将从XmlReader(最佳性能),{{1}填充您的类}或XmlDocument或使用一些工具帮助您从XML创建类或数据库,在这种情况下使用直接SQL来处理数据库。

反向操作将再次需要自定义方法。您将拥有由自定义EF实体或某些自动生成的类表示的数据,您必须将它们转换为新格式。您可以再次使用xsd.exe来获取新格式的类,并编写一个自定义.NET代码,从旧的类中填充新类(并使用XDocument将新结构持久化为XML)或者您可以使用{{1 }},XmlSerializerXmlWriter直接构建目标XML文档。

使用随时可用的解决方案,任何形式的数据迁移都不是一件容易的事。在真正庞大的数据处理的情况下,您可以使用SQL Server Integration Services等工具,您可以直接与XML和SQL交互并批量处理数据。

答案 1 :(得分:0)

看看SQLXML 4.0。它完全符合您的要求(在上传部分)。