2

私はここにフラット化されたXSDを持っています:http: //pastebin.com/tQVSH9Jp

XSD.exe(参照される要素を無視する)用に修正するために実行している「置換」XSLTスクリプトがありますが、結果のXSDにはいくつかのプロパティがありません。(IDには存在しませんUniqueID_Type)。

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

4

1 に答える 1

3

誰かが独自のxsd.exeを作成し、XmlSchemaImporterに依存することを提案したのはおかしいです... 1つは、それが簡単な作業ではないと思います。次に、属性が欠落している問題はXmlSchemaImporterに起因します。ImportAttributeGroupMembersにバグがあります:XmlSchemaAttributeGroupRefを探す代わりに、XmlSchemaAttributeGroupをチェックしています(Reflectorの好意による以下の抜粋):

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)
        {
           ...
        }
     }
     ...
}

同様のユーティリティxsd2codeがあり、XMLスキーマリファクタリング(XSR)に入る前に元のXSDで試してみます。

このルートをたどりたい場合は、XSR用のQTAssistantをお勧めします(私はそれに関連付けられています)。XSDを最新バージョン(4.0.21)で試しましたが、機能しました。結果をここに掲載しました。

欠陥があると指摘したフラグメント(フィールドを表示しているだけです)に対して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設定InlineAttributeGroups

QTAssistantを使用したリファクタリングの詳細に興味がある場合は、SOに関するこの投稿もご覧ください。とにかく、私はリファクタリングされたスキーマ全体を投稿しました、それを自由に使用してください...

于 2012-04-12T02:25:56.790 に答える