2011-10-27 2 views
2

xsd.exeをC#クラスで使用すると、グローバルタイプではなくネストタイプの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は、私のC#クラスによって生成されたXMLとXSDをマッピングしていないと思う。私は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。私はそれをし、非常にうまくいった。ありがとうございました。 –

関連する問題