许多XSD共享元素&;类型-有没有生成类的方法?(c#)
我得到了大约160个XSD,希望能够生成c#类,我不允许更改XSD,他们可能会添加更多的模式,这些模式遵循他们给我的格式 每个架构声明具有许多匹配类型的同名根元素,例如: 文件1:许多XSD共享元素&;类型-有没有生成类的方法?(c#),c#,xml,xsd,C#,Xml,Xsd,我得到了大约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: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>
..... 9000多行类型。。。。。
文件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>
..... 9000多行类型。。。。。
除了在这里和那里添加了一些元素外,这些模式中的大多数都是相同的
我尝试使用XSD.exe,但出现了“此类型已声明”警告和许多缺少的元素;它似乎只是选择了在参数文件中传递给它的最后一个XSD。您可以使用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
{
}
}
但是无论你怎么做,都会有点混乱。如果你有名称冲突,并且不使用名称空间,你希望得到什么样的答案?从逻辑上讲,以不同的方式使用相同的名称会带来一个固有的问题。首先解决这个问题。我受到严格的指示,不能更改模式。如果我创建了模式,我可能会使用不同的名称空间或将其展平。您可能希望仅使用XmlDocument类或XDocument类解析类。模式用于检查是否生成了有效的xml,而不需要读取有效的xml。对不起,但我认为这是一种不好的方法。当您处理一个小的、简单的、稳定的模式时,数据绑定是一种很好的XML处理方法。当您处理大量不断变化的复杂模式时,它不会扩展。我想用一种更干净的方法来实现它,但效果很好。