在C#类中使用xsd.exe,是否有办法生成具有嵌套类型的xsd文件,而不是全局类型?
我想使用这个xsd文件,使用SSIS - Sql Server Integration Services,看看SSIS没有很好地读取我的xsd。
我想用嵌套类型生成像这样的xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Country">
<xs:complexType>
<xs:sequence>
<xs:element name="City">
<xs:complexType>
<xs:sequence>
<xs:element name="CityName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CoutryName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但xsd.exe使用全局类型生成此内容,而SSIS不会读取它。我需要手动更改此xsd,如上所述。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Country">
<xs:complexType>
<xs:sequence>
<xs:element name="City" type="City">
</xs:element>
<xs:element name="CoutryName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="City">
<xs:sequence>
<xs:element name="CityName" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
有什么建议吗?或者我可以使用的其他工具。
非常感谢。
答案 0 :(得分:4)
我将进一步假设“非常好”意味着您没有在XML Source输出中看到CountryName。 关于MSDN的文档是一个很好的阅读,虽然在我看来它没有描述为什么你会遇到你看到的行为。
我认为这与XML Source输出的确定方式有关。 SSIS从XML结构中推断出一个数据集;与根元素对应的顶级实体未映射到输出,因此与您关联的所有属性(在您的情况下为CountryName)都不会显示。
证明它的最简单方法是添加另一个包装你的国家的根元素(相当于拥有一个具有Country-type属性的虚拟“root”类)。
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element ref="Country"/>
</xs:sequence>
</xs:complexType>
</xs:element>
如果将上述架构片段添加到架构中,则应获得预期的结果。一开始我认为它与描述的here问题有关;虽然您仍然可以使用该工具来显示上面MSDN链接所描述的数据集,但在您的情况下,您建议的创作风格(基本上是russian-doll)无法改变结果。