2012-04-11 8 views
1

は、私がここに平坦化XSDを持っています得られたXSDにはいくつかの特性がありません。 (にはIDは存在しません)。Xsd.exeでは不足しているネストされたプロパティ

これらの置換を正しく実行するXSLTスクリプトを誰でも提供できますか、まったく別のソリューションを提供することはできますか?

+0

'xsd.exe'は、フレームワーククラス(' XmlSchema'、 'XmlSchemaImporter'、 XmlCodeExporter'、 'CodeDomProvider')、あなたは非常に簡単に独自の' xsd.exe'を書くことができます。 –

答えて

3

誰かがあなた自身のxsd.exeを書いて、XmlSchemaImporterに頼っていることをおもしろいと思います...私はそれが簡単な仕事ではないと思います。第2に、欠落している属性の問題はXmlSchemaImporterから発生します。バグがImportAttributeGroupMembersにあります:代わりにXmlSchemaAttributeGroupRefを探して、それはXmlSchemaAttributeGroup(リフレクターの礼儀以下抜粋)をチェックされています

private void ImportAttributeGroupMembers(XmlSchemaAttributeGroup group, string identifier, CodeIdentifiers members, CodeIdentifiers membersScope, string ns) 
{ 
    for (int i = 0; i < group.Attributes.Count; i++) 
    { 
     object obj2 = group.Attributes[i]; 
     if (obj2 is XmlSchemaAttributeGroup) 
     { 
      ... 
     } 
     else if (obj2 is XmlSchemaAttribute) 
     { 
      ... 
     } 
    } 
    ... 
} 

私が行く前に、元のXSDをしようとするだろう同様のユーティリティ、xsd2codeがありますXMLスキーマリファクタリング(XSR)

このルートを下りたい場合は、XSRのQTAssistant(私はそれに関連付けられています)をお勧めします。私はあなたのXSDを最新バージョン(4.0.21)で試してみました。結果はhereです。

あなたに欠陥を指摘したフラグメントのためXsd.exeではを使用して生成されたコード(私はフィールドを示していますが)今のID属性のidFieldを示しています

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.opentravel.org/OTA/2003/05")] 
public partial class UniqueID_Type { 

    private CompanyNameType companyNameField; 

    private string uRLField; 

    private string typeField; 

    private string instanceField; 

    private string idField; 

    private string iD_ContextField; 

    ... 
} 

セットアップのための具体的な何されますtrueに設定する必要がありInlineAttributeGroups:あなたはQTAssistantを使用してリファクタリングの詳細に興味があれば

QTAssistant setting InlineAttributeGroups

、またSO上、this postを見てみてください。とにかく、私はリファクタリングされたスキーマ全体を投稿しました。自由に使ってください。

+0

ありがとうございました!生成された.xsdファイルは、xsd.exeでうまく動作します。 IveがQTAssistantをダウンロードして、元のXSDを開いて修正プログラムを複製しようとしましたが、それを実行できないようです。 QTAssistantで取った手順を説明できますか? – maxp

+0

@maxp、はい、あなたの特定のセットアップのためのすべてのステップを含むドキュメントを投稿します。あなたのためにこの記事(別の投稿用)がうまくいかない場合は、まず私に知らせてください:http://paschidev.com/downloads/xsd-structure-to-csv-as-path-type-cardinality.pdf –

+0

こんにちはペトル、私はそれに従おうとしましたが、ちょっと混乱しました。 最初にXSRを作成するはずですか?私は '.NET xsd.exe'ツールリンクを使用しようとしましたが、 'Select file set'は常に空になりましたか?私は紛失してしまったので、「ハウツー」文書は素晴らしいだろう。 – maxp

関連する問題