2012-01-25 13 views
2

XMLファイルのセットをインポートして変換してSQLデータベースにアップロードした後、別のXMLベースのファイルに再変換する作業が任されています。フォーマット。XMLファイルをリレーショナルSQLに変換する

XMLファイルはかなり大きく、その一部は少し複雑なので、これを行うには最良の方法がわかりません。私はもちろん、このプロセスを何らかの形で自動化したいと思います。実際に、Entity Frameworkのようなエキスパートなソリューションがあることを期待していました。

.NETでXMLを処理したり処理したりするのがとても新しいので、私の選択肢が本当にわかりません。私はXSLTについて読んだことがありますが、それは私が最初に覚える必要のある「言語」であると思われ、私には解決策ではないようです。

ちょっとした文脈を設定するだけで、最終的な解決策は実際にXMLの新しい/更新されたバージョンを毎週インポートし、新しいデータをsqlにアップロードして、もう1つのXMLフォーマットとして再エクスポートする必要があります。

誰かがどのように進むべきかについて私に何か考えを与えることができたら、私はずっと義務づけられています。

最初のinstictはXSD2DBまたはXML SPYのようなものを最初にデータベース構造を作成するために使用していましたが、どのように進んでいくのかわかりません。

私は実際にはかなりのブランクよ:)

+0

これは、C#がOTBを管理できるようなものだと感じています。すぐに答えが返ってくるかもしれない(atm at atm)。 –

答えて

0

XSLTは、別の形式でXML文書に1つの形式の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(最高のパフォーマンス)、XmlDocumentまたはXDocumentからか、いくつかのツールを使用しますXMLからクラスやデータベースを作成する際に役立ちます。その場合は、直接SQLを使用してデータベースを操作してください。

逆の操作でも、カスタムアプローチが必要です。カスタムEFエンティティまたはいくつかの自動生成されたクラスによって表されるデータがあり、それらを新しい形式に変換する必要があります。 xsd.exeを使用して新しい形式のクラスを取得し、古いクラスから新しいクラスを作成するカスタム.NETコードを書き込むことができます。XmlWriter,XDocumentまたはXmlDocumentを使用して構築することができます(XmlSerializerを使用します)。 XML文書を直接対象とする。

どのような形式のデータ移行も、すぐに使用できるソリューションでは容易ではありません。非常に膨大なデータ処理が必要な場合は、SQL Server Integration Servicesのようなツールを使用して、XMLとSQLを直接操作してデータをバッチ処理することができます。

0

SQLXML 4.0をご覧ください。それはまさにあなたが望むものです(アップロード部分)。

関連する問題