私は約160のXSDを与えられていて、C#クラスを生成できるようにしたいと思います。私はXSDを変更することは許されず、彼らが私に与えたフォーマットに従って多くのスキーマを追加するかもしれません。要素と型を共有する多くのXSD - クラスを生成する方法はありますか? (c#)
各スキーマには、多くのマッチングの種類などで同じ名前のルート要素を宣言します。
文献1:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root-XML" type="Root-XMLType1"/>
<xs:complexType name="Root-XMLType1">
<xs:sequence>
<xs:element name="Header" type="HeaderStruct"/>
<xs:element name="Delivery" type="DeliveryType1Struct"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DeliveryType1Struct">
<xs:complexContent>
<xs:restriction base="DeliveryType1Abstract">
<xs:all>
<xs:element name="GMTOffset" type="GMTOffsetType"/>
<xs:element name="UserName" type="UserNameType"/>
</xs:all>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
..... 9000 more lines of types .....
</xs:schema>
は、文献2:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root-XML" type="Root-XMLType2"/>
<xs:complexType name="Root-XMLType2">
<xs:sequence>
<xs:element name="Header" type="HeaderStruct"/>
<xs:element name="Delivery" type="DeliveryType2Struct"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DeliveryType2Struct">
<xs:complexContent>
<xs:restriction base="DeliveryType2Abstract">
<xs:all>
<xs:element name="GMTOffset" type="GMTOffsetType"/>
<xs:element name="UserName" type="UserNameType"/>
</xs:all>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
..... 9000 more lines of types .....
</xs:schema>
をこれらのスキーマのほとんどは、ここではいくつかの追加要素を除いて同じです。
XSD.exeを使用しようとしましたが、「このタイプは既に宣言されました」という警告と多くの不足している要素がありました。パラメータファイルで最後に渡されたXSDを選んだようです。
名前の衝突があり、名前空間を使用していない場合は、ここではどのような答えが必要ですか?論理的には、異なる名前で同じ名前を使用すると、本質的な問題が発生します。最初に修正してください。 – kjhughes
私はスキーマを変更しないという厳しい指示に従っています。別の名前空間を使用したり、作成した場合はスキーマを平坦化したりします。 – nelsontruran
XmlDocumentクラスまたはXDocumentクラスを使用するだけでクラスを解析できます。スキーマは、有効なxmlを生成していることを確認するために使用され、有効なxmlを読み取る必要はありません。 – jdweng