首页 > 解决方案 > 从架构创建 .cs 时,XSD.exe 会忽略限制吗?

问题描述

我正在尝试创建一个基于 XSD XML SCHEMA 的 .cs 类,但是,当我创建该类时,simpleType 限制并没有延续。使用 XSD.exe 和 VS 开发人员命令提示符从它生成的 SCHEMA 和类。我想知道是否有更好的解决方案来延续限制,据我所知,我需要一个 3d 派对工具,如果可能的话,我想避免使用它。

我的 SCEHMA:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Library">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="User" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="User">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Name" />
        <xs:element ref="Address" />
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="BooksRented" />
      </xs:sequence>
      <xs:attribute name="UserId" type="xs:ID" use="required" />
    </xs:complexType>
  </xs:element>
  <xs:element name="Name" type="xs:string" />
  <xs:element name="Address" type="xs:string" />
  <xs:element name="BooksRented">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Title" />
        <xs:element ref="Author" />
        <xs:element ref="Price" />
        <xs:element ref="Genre" />
      </xs:sequence>
      <xs:attribute name="Rents" type="xs:IDREF" />
    </xs:complexType>
  </xs:element>
  <xs:element name="Title" type="xs:string" />
  <xs:element name="Author" type="xs:string" />
  <xs:element name="Price">
    <xs:simpleType>
      <xs:restriction base="xs:int">
        <xs:minInclusive value="999"/>
        <xs:maxInclusive value="2599"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="Genre" type="xs:string" />
</xs:schema>

上面的代码是我的架构。

我创建类的方式是打开 VS 开发人员命令提示符,导航到存储架构的位置并编写类似“XSD MySchema.xsd /c”的内容。我想知道我是否做错了什么,或者是否还有更多问题,如果没有,为了将限制添加到课程中,最好的解决方案是什么?

生成的类,没有限制。

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Library {

    private User[] userField;

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

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class User {

    private string nameField;

    private string addressField;

    private BooksRented[] booksRentedField;

    private string userIdField;

    /// <remarks/>
    public string Name {
        get {
            return this.nameField;
        }
        set {
            this.nameField = value;
        }
    }

    /// <remarks/>
    public string Address {
        get {
            return this.addressField;
        }
        set {
            this.addressField = value;
        }
    }

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

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute(DataType="ID")]
    public string UserId {
        get {
            return this.userIdField;
        }
        set {
            this.userIdField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class BooksRented {

    private string titleField;

    private string authorField;

    private int priceField;

    private string genreField;

    private string rentsField;

    /// <remarks/>
    public string Title {
        get {
            return this.titleField;
        }
        set {
            this.titleField = value;
        }
    }

    /// <remarks/>
    public string Author {
        get {
            return this.authorField;
        }
        set {
            this.authorField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType="int")]
    public int Price {
        get {
            return this.priceField;
        }
        set {
            this.priceField = value;
        }
    }

    /// <remarks/>
    public string Genre {
        get {
            return this.genreField;
        }
        set {
            this.genreField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute(DataType="IDREF")]
    public string Rents {
        get {
            return this.rentsField;
        }
        set {
            this.rentsField = value;
        }
    }
}

使用从 SCHEMA 生成的类并创建一个示例 XML 文件

public class PopulateSchemaXSD
    {
        public void PopulateSchemaXML()
        {
            var data = new Library
            {
                User = new User[]
                {
                    new User
                    {
                        UserId = "1",
                        Name = "Bill",
                        Address = "BongoStreet",
                        BooksRented = new BooksRented[]
                        {
                            new BooksRented
                            {
                                Title = "Buffalo Water",
                                Author = "John Johnson",
                                Genre = "Fiction",
                                Price = 999,
                                Rents = "1"
                            },
                            new BooksRented
                            {
                                Title = "Star Ocean",
                                Author = "Frank Biller",
                                Genre = "SciFi",
                                Price = 1232,
                                Rents = "1"
                            },
                            new BooksRented
                            {
                                Title = "They Didn't See it Coming",
                                Author = "Steven Hing",
                                Genre = "Educational",
                                Price = 1345,
                                Rents = "1"
                            }
                        }
                    }
                }
            };

            var serializer = new XmlSerializer(typeof(Library));
            using (var stream = new StreamWriter(@"C:\path\example.xml"))
            {
                serializer.Serialize(stream, data);
            }
        }
    }

标签: c#xmlxsd

解决方案


推荐阅读