1

假设我希望我的 xml 包含任意数量的 CONTAINER 标签,其中每一个标签都再次包含任意数量的容器标签,依此类推。xsd 会是什么样子?

ps

我希望将此 xsd 编译为类。

非常感谢你。

4

1 回答 1

2

XSD 可能如下所示:

<xs:schema
   elementFormDefault    ="qualified"
   targetNamespace       ="urn:Cheeso._2009oct.ContainerExample.Data"
   xmlns:tns             ="urn:Cheeso._2009oct.ContainerExample.Data"
   xmlns:xs              ="http://www.w3.org/2001/XMLSchema"
   >

  <!-- a complex type or structure -->
  <xs:complexType name="MyComplexType">
      <xs:sequence>
        <xs:element name="CONTAINER" maxOccurs="unbounded" nillable="true" type="tns:MyComplexType" />
      </xs:sequence>
      <xs:attribute name="Id" type="xs:string"/>
  </xs:complexType>

  <xs:element name="CONTAINER" nillable="true" type="tns:MyComplexType" />

</xs:schema>

符合此模式的 XML 可能如下所示:

<CONTAINER Id="L001.N001" xmlns="urn:Cheeso._2009oct.ContainerExample.Data">
  <CONTAINER Id="L002.N001" />
  <CONTAINER Id="L002.N002" />
  <CONTAINER Id="L002.N003">
    <CONTAINER Id="L003.N001">
      <CONTAINER Id="L004.N001" />
      <CONTAINER Id="L004.N002" />
      <CONTAINER Id="L004.N003" />
    </CONTAINER>
    <CONTAINER Id="L003.N002">
      <CONTAINER Id="L004.N004">
        <CONTAINER Id="L005.N001" />
        <CONTAINER Id="L005.N002" />
      </CONTAINER>
      <CONTAINER Id="L004.N005">
        <CONTAINER Id="L005.N003" />
        <CONTAINER Id="L005.N004" />
        <CONTAINER Id="L005.N005" />
      </CONTAINER>
      <CONTAINER Id="L004.N006" />
    </CONTAINER>
  </CONTAINER>
</CONTAINER>

它可以嵌套到任意深度。

生成这样的类:xsd.exe /c Foo.xsd. 这些类看起来像这样:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:Cheeso._2009oct.ContainerExample.Data")]
[System.Xml.Serialization.XmlRootAttribute("CONTAINER", Namespace="urn:Cheeso._2009oct.ContainerExample.Data", IsNullable=true)]
public partial class MyComplexType {

    private MyComplexType[] cONTAINERField;

    private string idField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("CONTAINER", IsNullable=true)]
    public MyComplexType[] CONTAINER {
        get {
            return this.cONTAINERField;
        }
        set {
            this.cONTAINERField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string Id {
        get {
            return this.idField;
        }
        set {
            this.idField = value;
        }
    }
}
于 2009-10-14T10:24:23.563 回答