将(大型)XML文件转换为关系SQL
本文关键字:转换 关系 SQL 文件 XML 大型 | 更新日期: 2023-09-27 18:21:25
我的任务是导入一组XML文件,对它们进行转换并上传到SQL数据库,然后将它们重新转换为不同的XML格式。
XML文件相当大,有些文件有点复杂,所以我不确定最好的方法。我当然想以某种方式自动化这个过程——实际上我希望能有某种实体框架式的解决方案。
我对在.NET中处理和处理XML还很陌生,所以我真的不知道我的选择是什么。我读过关于XSLT的文章,但在我看来,这是一种我需要首先学习的"语言",使它对我来说不是一种解决方案
只是为了设置一点上下文,最终解决方案实际上需要每周导入XML的新版本/更新版本,将新数据上传到sql,并重新导出为其他XML格式。
如果有人能给我任何关于如何进行的想法,我将不胜感激。
我的第一个想法是使用XSD2DB或XML SPY之类的东西来首先创建数据库结构,但我也不知道该如何进行。
事实上,我很茫然:)
所有像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
(最佳性能)、XmlDocument
或XDocument
填充类,或者使用一些工具帮助您从XML创建类或数据库,在这种情况下,使用直接SQL来处理数据库。
反向操作将再次需要自定义方法。您将使用自定义EF实体或一些自动生成的类来表示数据,并且必须将它们转换为新格式。您可以再次使用xsd.exe获取新格式的类,并编写自定义.NET代码从旧类填充新类(并使用XmlSerializer
将新结构持久化为XML),也可以使用XmlWriter
、XDocument
或XmlDocument
直接构建目标XML文档。
使用现成的解决方案,任何形式的数据迁移都不是一件容易的事。在处理大量数据的情况下,您可以使用SQL Server Integration Services等工具,在这些工具中,您将直接与XML和SQL交互,并批量处理数据。
了解一下SQLXML 4.0。它正是你想要的(在上传部分)。