Как работать с разными пространствами имен .xsd, которые содержат одинаковые элементы / классы? - PullRequest
3 голосов
/ 14 марта 2012

У меня небольшие проблемы с пониманием того, как я должен работать с XML-файлами, поэтому я надеюсь, что вы, ребята, сможете направить меня в нужном направлении :) Надеюсь, я смогу объяснить свою проблему достаточно ясно:)

У меня много файлов .xsd, которые все связаны сверху вниз. Итак, у меня есть 10 .xsd с пространством имен A и 10 .xsd с пространством имен B. Допустим, что эти два пространства имен представляют каждый собственный автомобиль. Это означает, что они оба имеют много одинаковых элементов, таких как двигатель и т.д. Я подумал, что мог бы использовать xsd.exe, а затем просто сериализовать их в мой код на C #. Но когда я преобразовал файлы .xsd в два файла .cs (по одному для каждого пространства имен / машины), они разделяют много одинаковых классов. Это создает проблему, когда я хочу добавить два файла .cs в свой проект. Не могу иметь два класса с одинаковым именем ... Как мне это решить? Я использую неправильные инструменты или я совершенно не понял, что мне делать? :)

Начало файла .cs:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.261
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System.Xml.Serialization;

// 
// This source code was auto-generated by xsd, Version=4.0.30319.1.
// 


/// <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://rep.oio.dk/sundcom.dk/medcom.dk/xml/schemas/2006/07/01/")]
[System.Xml.Serialization.XmlRootAttribute("FixedFont",     Namespace="http://rep.oio.dk/sundcom.dk/medcom.dk/xml/schemas/2006/07/01/", IsNullable=false)]
public partial class SimpleFormattedText {

private object[] itemsField;

private ItemsChoiceType[] itemsElementNameField;

private string[] textField;

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("Bold", typeof(BreakableText))]
[System.Xml.Serialization.XmlElementAttribute("Break", typeof(Break))]
[System.Xml.Serialization.XmlElementAttribute("Center", typeof(BreakableText))]
[System.Xml.Serialization.XmlElementAttribute("Italic", typeof(BreakableText))]
[System.Xml.Serialization.XmlElementAttribute("Right", typeof(BreakableText))]
[System.Xml.Serialization.XmlElementAttribute("Space", typeof(Space))]
[System.Xml.Serialization.XmlElementAttribute("Underline", typeof(BreakableText))]
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
public object[] Items {
    get {
        return this.itemsField;
    }
    set {
        this.itemsField = value;
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("ItemsElementName")]
[System.Xml.Serialization.XmlIgnoreAttribute()]
public ItemsChoiceType[] ItemsElementName {
    get {
        return this.itemsElementNameField;
    }
    set {
        this.itemsElementNameField = value;
    }
}

/// <remarks/>
[System.Xml.Serialization.XmlTextAttribute()]
public string[] Text {
    get {
        return this.textField;
    }
    set {
        this.textField = value;
    }
}

}

Ответы [ 2 ]

5 голосов
/ 14 марта 2012

Наилучшим способом может оказаться подача всех файлов XSD в xsd.exe одновременно.Просто для иллюстрации, если у вас есть три XSD-файла, вы просто называете это:

xsd.exe a.xsd b.xsd c.xsd /c

Если вам нужно переопределить пространство имен, вы просто предоставляете дополнительный параметр для xsd.exe:

/namespace:MyCompany.Xsd.Something
1 голос
/ 14 марта 2012

Один из способов сделать это - создать классы в разных пространствах имен .Net.
После этого у вас будет два набора классов, но, поскольку они находятся в отдельных пространствах имен, в вашем коде не будет конфликта.

РЕДАКТИРОВАНИЕ:

Чтобы указать xsd.exe использовать ваше пространство имен, используйте параметр / namespace, например:

xsd.exe myxsd.xsd /namespace:MyNamespace /classes
...