3

オブジェクト階層を定義するXSDがいくつかあります。たとえば、math.xsd、base.xsdですが、math.xsdはbase.xsdに依存します。それらのxsd-sからクラスを生成する必要があります。

CodeXSツールと XSD.exeの2つのツールについてはすでに読みました 。xsd.exeの問題は、相互に依存する2つのxsd-sからクラスを生成できなかったことです。そのような場合にxsd.exeを使用するための正しいパラメータを知っている人はいますか?

さらに、私は以下を探しています:-より多くのツール-それらのツール間の比較-.net3.5を使用したオブジェクトへのxsdありがとう。

4

5 に答える 5

3

同じアプローチを使用できない理由はありませんがxsd.exe、.cs ファイルをディスクに書き出す前に、生成された CodeDOM モデルに対して独自のコードを実行して、必要な変更を行います。

一般的な考え方は、XSD ファイルをXmlSchemaオブジェクトにロードし、内部クラスXmlCodeExporterXmlSchemaImporterクラスを使用して CodeDOM 名前空間を設定することです。

それが完了したら、CodeDOM AST に対して必要な微調整を自由に行ってから、ディスクに書き出すことができます。

例えば。

  XmlSchema schema = null; // Load XSD file here
  var schemas = new XmlSchemas();
  schemas.Add(schema);

  var ns = new CodeNamespace { Name = "MyNamespace" };

  ns.Imports.Add(new CodeNamespaceImport("System"));
  ns.Imports.Add(new CodeNamespaceImport("System.Collections.Generic"));

  var exporter = new XmlCodeExporter(ns); 
  var importer = new XmlSchemaImporter(schemas); 

  foreach (XmlSchemaElement element in schema.Elements.Values) 
  { 
    var mapping = importer.ImportTypeMapping(element.QualifiedName);
    exporter.ExportTypeMapping(mapping); 
  }

  // Transform CodeDOM as required, adding new attributes, methods, modifying
  // inheritance hierarchy, whatever.

  var provider = new CSharpCodeProvider(); 
  using (var writer = new StreamWriter(outputFile, false))
    provider.GenerateCodeFromNamespace(ns, writer, new CodeGeneratorOptions())

スキーマが他のスキーマを参照する場合は、 を使用しXmlSchemaSet、作成したリゾルバーにプロパティを設定するXmlResolver必要があります。これにより、インポートされたスキーマが検索され、XmlSchemaSet呼び出し時に に提供さCompile()れます。

インポートされたスキーマが別の名前空間で物事を宣言する可能性があります。XmlSerializer別の名前空間でインポートされたアイテムを使用して XML を生成する場合は、生成された CodeDOM をかなりハックする必要がある場合があります。

しかし、それは可能です。

幸運を!

于 2009-08-22T01:46:06.943 に答える
1

それは[高価な]商用製品であり、私はそれを何らかの方法で保証することはできませんが、別の可能性はhttp://www.liquid-technologies.com/です。彼らの「xsd-gen」ツールは、Java/C#/Silverlight や C++ などの多くの言語をサポートしています。2 つの言語を一貫してサポートする必要がある場合は、一見の価値があります。

注: コミュニティ エディションはありますが、コード生成機能はありません。

于 2009-12-15T01:21:52.307 に答える
0

LINQ to XSDを試しましたか?プロジェクト名は実際にはその目標を説明していないので、xsd.exeの代わりに役立つと言えます。

于 2009-08-19T20:00:17.900 に答える
0

しばらく前に、DTD ドキュメントを XSD ドキュメントに変換し、次に .Net クラスに変換するプロジェクトがありました。XSD.exe は、共通のベース XSD を参照する XSD ドキュメントが多数あったため、有用なコードであることが判明しました。system.xml の内部を操作するためのリフレクションと xsd.exe のリバース エンジニアリングを組み合わせて使用​​して、独自の XSD to .Net ジェネレーターを作成することになりました。実行可能なジェネレーターをハックするのに約 2 週間かかりました。

于 2009-08-20T05:03:17.653 に答える