2011-10-27 5 views
2

C# 클래스에서 xsd.exe를 사용하면 전역 유형 대신 중첩 유형이있는 xsd 파일을 생성 할 수 있습니까?xsd.exe로 전역 유형 대신 중첩 유형 생성

이 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

"아주 잘"의미하는 것이 아니라 이것을 시도하고있는 상황에 대해 좀 더 자세히 설명해 주실 수 있습니까? 데이터 흐름에서 XML 소스라고 가정합니다. 나는 2008 R2로 시도했고 두 XSD 모두 동일한 결과를 얻었다. –

+0

확인. @PetruGardea 그것은 당신이 가정 한대로입니다. 데이터 흐름의 XML 소스 SSIS는 XSD를 C# 클래스에서 생성 된 XML로 매핑하지 않는다고 생각합니다. WebService를 만들었습니다. –

답변

3

"아주 잘"은 XML 소스 출력에서 ​​CountryName을 볼 수 없다는 것을 의미합니다. MSDN에 대한 설명서는 좋은 참고 자료이지만 제 생각에는 사용자가 볼 수있는 동작이 발생하는 이유를 설명하지는 못합니다.

XML 소스 출력이 결정되는 방식과 관련이 있다고 생각합니다. SSIS는 XML 구조의 데이터 집합을 추론합니다. 루트 요소에 해당하는 최상위 엔티티는 출력에 매핑되지 않으므로 해당 국가의 CountryName에 연결된 모든 속성이 표시되지 않습니다.

가장 쉬운 방법은 사용자 국가를 래핑하는 다른 루트 요소를 추가하는 것입니다 (국가 유형 속성이있는 더미 "루트"클래스와 동일).

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

스키마에 위 스키마 조각을 추가하면 예상 결과가 나타납니다. 처음에 저는 그것이 here으로 설명 된 문제와 관련이 있다고 생각했습니다. 위의 MSDN 링크에서 설명한대로이 도구를 사용하여 데이터 세트를 시각화 할 수 있지만 사용자가 제안한 작성 스타일 (기본적으로)은 결과를 변경할 수 없습니다.

+0

감사합니다. @Petru Gardea. 나는 그것을했고, 매우 잘 움직였다. 고맙습니다. –