如何更改xsd生成xml架构的方式?

时间:2014-01-22 17:05:03

标签: c# visual-studio-2010 xsd

我很擅长使用visual studio xsd.exe工具从类生成xsd架构,我在这里有一个示例场景,为简单起见而减少了。

以下是我的课程样本

public class quality
{
    ....
    public List<Application> Applications { get; set; }
}

public class Application
{
    ...
    public int LOC { get; set; }
    public Int32 DebtInDollars { get; set; }
    public Int32 DebtDensity { get; set; }
    ...
}

xsd生成的架构是“平坦的”可以这么说......就像这样

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:complexType name="quality">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="Applications" type="ArrayOfApplication" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ArrayOfApplication">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Application" nillable="true" type="Application" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="Application" nillable="true" type="Application" />
  <xs:complexType name="Application">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="1" name="LOC" type="xs:int" />
      <xs:element minOccurs="1" maxOccurs="1" name="DebtInDollars" type="xs:int" />
      <xs:element minOccurs="1" maxOccurs="1" name="DebtDensity" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

我想要生成的更多是层次结构,正如我在其他一些模式中看到的那样,对我来说更有意义....

       <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:complexType name="quality">
    <xs:sequence>
      <xs:element name="Applications">
             <xs:complexType>
                <xs:sequence>
                  <xs:element minOccurs="0" maxOccurs="unbounded" name="Application">
                        <xs:complexType>
                             <xs:sequence>
                                      <xs:element minOccurs="1" maxOccurs="1" name="LOC" type="xs:int" />
                                      <xs:element minOccurs="1" maxOccurs="1" name="DebtInDollars" type="xs:int" />
                                      <xs:element minOccurs="1" maxOccurs="1" name="DebtDensity" type="xs:int" />
                            </xs:sequence>
                        </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

无论如何要实现这一目标吗?

由于

1 个答案:

答案 0 :(得分:0)

查看是否可以通过使用属性进行装饰来控制XSD生成,如以下MSDN文章中所述。我知道它是用于序列化的,但XSD中生成的模式定义了System.Xml.Serialization.XmlSerializer使用的XML格式。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer(v=vs.110).aspx

我没试过,但可能值得一试。