2011-10-27 79 views
2

在C#類中使用xsd.exe,有​​沒有辦法用嵌套類型生成xsd文件,而不是全局類型?使用xsd.exe生成嵌套類型而不是全局類型

我想使用這個xsd文件,SSIS - Sql服務器集成服務,看看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

您能否更具體地指出哪些「非常好」意味着什麼,以及您嘗試這種情況的環境?我假設它是一個數據流中的XML源;我已經嘗試過2008 R2,並且我獲得了兩個XSD的相同結果。 –

+0

好的。 @PetruGardea就像你所設想的那樣。數據流中的XML源。我認爲SSIS沒有將XSD與我的C#類生成的XML映射。我創建了一個WebService。 –

回答

3

我會進一步假設不是「很好」意味着你沒有在你的XML源輸出中看到CountryName。 關於MSDN的文檔是一個很好的解讀,儘管在我看來它沒有描述爲什麼你會遇到你所看到的行爲。

我相信它與XML源輸出的確定方式有關。 SSIS從XML結構推斷數據集;對應於根元素的頂層實體未映射到輸出,因此與您關聯的所有屬性(在您的情況下爲CountryName)都不會顯示出來。

證明它的最簡單方法是添加另一個封裝您國家的根元素(相當於擁有一個具有Country-type屬性的虛擬「根」類)。

<xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="Country"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

如果添加上述模式片段到您的模式,你應該把你的預期效果。起初我認爲它與here描述的問題有關;儘管您仍然可以使用該工具來查看上述MSDN鏈接中描述的數據集,但對於您的情況,您建議的創作風格(基本上爲russian-doll)無法改變結果。

+0

謝謝@Petru Gardea。我做到了,工作得很好。謝謝。 –

相關問題