先日、XMLファイルからC#のモデルクラスを生成するXSDというツールでハマったのであメログ。
.net frameworkにはXMLファイルからC#のモデルクラスを生成してくれるXsd.exeという
ツールが予めインストールされてます。
※見付からない人はドットネットのインストールディレクトリを検索してみてね
このツールでXMLからC#のクラスファイルを生成する事が出来ます。
手順
- xsd hoge.xml
これでスキーマファイル(hoge.xsd)がカレントディレクトリに生成されます - xsd /c hoge.xsd /n:namespace.hoge
これでC#のカレントディレクトリにクラスファイルが生成されます
これはこれで便利やねんけど、例えば
hoge.xml
<?xml version="1.0" encoding="utf-8"?>こんなXMLファイルやと生成されるC#クラス内に
<root>
<child0>value0</child0>
<child1>value1</child1>
<child2>value2</child2>
</root>
NewDataSetという内部クラスが生成されてしまいます。
C#クラス一つだけなら問題なくコンパイルも通んねんけど
生成されたクラスが二つ以上同じネームスペース内に有ると
重複エラーでコンパイルが通らんくなってしまいます…。
ツールの引数を色々変えて試してみたけど、あかんくて結局
hoge.xml
<?xml version="1.0" encoding="utf-8"?>こんな感じに要素を一つ追加して回避しました。
<root>
<child>
<child0>value0</child0>
<child1>value1</child1>
<child2>value2</child2>
</child>
</root>
こうするとNewDataSetという内部クラスは生成されず、重複エラーも起きない。
その他の回避策としてはクラス毎にネームスペースを変えるとかかな…美しくないけど。
ツールの仕様らしいです〜。