使用xsd.exe生成嵌套类型而不是全局类型

使用xsd.exe生成嵌套类型而不是全局类型,xsd,xsd.exe,ssis,Xsd,Xsd.exe,Ssis,在C#类中使用xsd.exe,有没有办法生成嵌套类型而不是全局类型的xsd文件 我想将这个xsd文件与SSIS-SQLServer集成服务一起使用,但SSIS并没有很好地读取我的xsd 我想用嵌套类型生成如下xsd: <?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified

在C#类中使用xsd.exe,有没有办法生成嵌套类型而不是全局类型的xsd文件

我想将这个xsd文件与SSIS-SQLServer集成服务一起使用,但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会生成全局类型,SSI不会读取它。我需要手动将这个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>

有什么建议吗?或者其他我可以使用的工具


非常感谢。

我将进一步假设“不太好”意味着您在XML源输出中没有看到CountryName。 上的文档是一本很好的读物,尽管在我看来,它没有描述为什么您会遇到您看到的行为

我认为这与确定XML源输出的方式有关。SSIS从XML结构推断数据集;与根元素对应的顶级实体未映射到输出,因此在您的案例CountryName中,与之关联的所有属性都不会显示

证明这一点最简单的方法是添加另一个包装您的国家的根元素(相当于有一个具有国家类型属性的伪“根”类)



如果将上述模式片段添加到模式中,应该会得到预期的结果。起初我认为这与所描述的问题有关;尽管您仍然可以使用该工具来可视化上面MSDN链接所描述的数据集,但在您的情况下,您建议的创作风格(基本上是a)无法改变结果。

能否请您更具体地说明“不太好”的含义,以及您尝试此操作的上下文?我假设它是数据流中的XML源;我试过2008 R2,两个XSD的结果都是一样的@佩特鲁加德亚,这是你想象的。数据流中的XML源。我认为SSIS没有用我的C#类生成的XML映射XSD。我创建了一个网络服务。谢谢@Petru Gardea。我做到了,而且做得很好。非常感谢。
<xs:element name="root">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="Country"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>