我已经获得了大约160个XSD并且希望能够生成c#类,我不允许更改XSD,他们可能会添加更多符合他们给我的格式的模式。
每个模式声明具有许多匹配类型的同名根元素,例如:
文件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。
答案 0 :(得分:1)
您可以使用xsd.exe为每个模式生成一组类,并让每个模式进入自己的.net命名空间。
如果您有xsd.exe生成部分类,那么您可以将接口添加到具有通用性的接口,以允许您以多态方式处理它们,以便为每个模式制定代码。
// Generated by XSD.exe
namespace A
{
partial class GeneratedRootXML
{
public string Header {get;set;}
....
}
}
// Generated by XSD.exe
namespace B
{
partial class GeneratedRootXML
{
public string Header {get;set;}
....
}
}
// Your code
interface IMyRootXML
{
public string Header {get;set;}
}
namespace A
{
partial class GeneratedRootXML : IMyRootXML
{
}
}
namespace B
{
partial class GeneratedRootXML : IMyRootXML
{
}
}
但是你怎么做它会变得有点混乱。