2012-05-11 8 views
7

私はxmlファイル(C#でXmlDocumentを使用して作成しました)を作成しましたが、xsdファイルを作成する必要があります。これはプログラムでもC言語で対応しています。 xmlファイルを作成するために同じクラスを使用できますか?または他の(xsd関連の)クラスがありますか?C#でプログラムでXSDファイルを作成するには?

+2

XML文書が記述するXSDを構築するために必要なメタデータを持っていないことに留意すべきです資料。あなたのXML文書はXSDか、XSDを使って記述/定義したい文書ですか? –

+0

XSDファイルを使用して記述したいXML文書です。 – Shadi

答えて

2

XSDは、もう1つのXMLタイプのファイルです。 XMLファイルを作成するために使用しているものは、XSDファイルを作成するのにも役立ちます。ファイルに入れるタグ/属性を知る必要があります...

+0

XSDは* ahem * XML Schema Definitionの略です。どういう意味ですか?つまり、有効なXMLで書かれています。つまり、どのXMLライターも問題なく作成できるはずです。 –

+0

ご回答ありがとうございました... これはまさに私がやったことですが、XmlDocument CreateElementメソッドで書いたにもかかわらず、xsd要素の接頭辞が生成されていないという問題があります。 – Shadi

+1

@shadyそれが正常に動作していない場合は、関連する部分を投稿すると助けになるかもしれません。 – psubsee2003

4

XMLファイルからXSDファイルを作成したいだけなら、Visual Studioに付属しているMicrosoftのXSD.EXEを使うことができます。

これを使用するには、Visual Studioコマンドプロンプトを開きます。次にxsd file.xmlと入力して、そのXMLファイルのスキーマを生成します。

また、このツールを使用してXML入力用のクラスを生成することもできます。/classesパラメータを渡すだけです。

4

XMLスキーマファイルはXMLファイルですが、手作業で行うのは厄介なことがいくつかあります。 XSD.exeまたはXSD2Code.exeで生成されたC#クラスを使用する代わりにDOM APIを使用してXMLを記述する理由を説明できますか?それとも少し押してみてください... C#のステートメントが最終的にILアセンブリに変わると言っている人にいくぶん類似しています。代わりにILを書くのはなぜですか?

もう1つの方法は、スキーマオブジェクトモデルAPIによって提供されています。 .NETではSystem.Xml.Schema名前空間です。

code example found here on MSDNをご覧ください。それは別のアプローチのアイデアをあなたに与えるでしょう。これは、実際のXMLを扱う代わりに、XSDを生成するためのプログラマーフレンドリーなAPIを提供します。

1

解決策: 私はもともと返信を投稿しましたが、Stack Overflowではなく私の回答を編集するので、ここで編集します。私が提案した元のツールは、逆に進んでいます。私はいくつかの調査を行い、誰かがMyGenerationsというツールを勧めました。そのためにはインストール、ダウンロードされたテンプレート、作業の煩雑さが必要でした。私はさらにいくつかの研究を行い、CodePageのかなり気の利いたソリューションを見つけましたが、私がテストしたので、その解決策はいくつかの変更が必要です。コードはXmlToXsdと呼ばれ、URLは

http://www.codeproject.com/Articles/133570/XmlToXsd-A-Better-Schema-Generatorです。

[プログラム]セクションには2つのバグがあります。まず、XSDを実行可能ファイルのルートに保存します。心配しないでください、exeは単に1つのCSファイルにあるメソッドを呼び出します。プロジェクトにそのCSファイルを含め、指定された行で呼び出すだけで、パスをXMLと同じフォルダに変更する必要があります。さらに、著者は、迷惑URLのtargetnamespaceを使用します。 DevExpressは存在しないURLに苦情を投げます。いくつかの努力を通じて、私はターゲットURLをnullに置き換えました。添付のCSファイルで私はいくつかの変更を加えなければなりませんでした。私は彼の心の範囲に変更することができますよりも多くの理解を持つ他の人。私は単に私がしたことを彼らに伝えることによって他の人を助けます。

変更1:「target = XNamespace.Get(targetNamespace);」の前に変更します。ターゲット名前空間にnullでない場合にのみif文を追加します。

変更2:リターンのために別のifステートメントを追加しました。 null戻り値、元の戻り値のコピーは次のように変更されます。

2.1:targetnamespace属性項目をヌークします。 2.2:置換呼び出しの後に、 "の別の置換呼び出しを追加します。 2.3:戻す前に、中括弧を追加する必要があります。target = "null"

結果ファイルは完全に有効で、プログラムによって作成されます。

はい、1はXsd.exeではを使用することができますが、手動で、私は会話のプログラムによる方法が必要

オリジナルのポスト:。 は、私は必ずしもプログラム的に、同じ質問があったXSDユーティリティは仕事をしません。問題は、MicrosoftがVisual Studio 2012 Professionalでxsd.exeを配布していないことです。ハードドライブを検索して、MicrosoftのSDK、C:\ Program Fi les(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ x64 \ xsd.exe」にあります。

XMLファイルがあるフォルダに移動して、Visual StudioではなくコマンドボックスからXSDユーティリティを実行し、XSDファイルに巻き上げる必要がありました。

このタスクをプログラマチックに行う1つの方法は、コードからXSDを呼び出すことですが、それはXSDの配布を意味します。

私はこの1つのアセンブリを見つけましたが、仕事をする可能性のあるものは使用しませんでした。 http://xsd2code.codeplex.com/

-1

このお試しください:チェックアウトxDocumentから場合

string xmlFilePath = @"myxmlfile.xml"; 
string xsdOutputPath = @"myxmlfile.xsd"; 

DataSet ds = new DataSet(); 

System.IO.FileStream fsReadXml = new System.IO.FileStream(xmlFilePath, System.IO.FileMode.Open); 
ds.ReadXml(fsReadXml); 

ds.WriteXmlSchema(xsdOutputPath); 

を:

DataSet ds = new DataSet(); 
ds.ReadXml(YourXDocument.CreateReader()); 
ds.WriteXmlSchema(xsdOutputPath); 
関連する問題