共用方式為


Form 屬性繫結支援

.NET Framework 會提供 form 屬性 (Attribute) 的繫結支援。

雖然 .NET Framework 的 XML 序列化 (Serialization) 程式碼會根據項目辨識不同的預設值 qualified,但是 Xsd.exe 工具等同於具有 XmlAttributeXmlElement 屬性 (Attribute) 之 Form 屬性 (Property) 的 form XML 屬性 (Attribute)。

說明

XML 結構描述要求所有全域宣告的項目和屬性 (做為 <schema> 項目的子系),在執行個體文件中都必須符合命名空間。對於區域宣告的項目和屬性 (在 <complexType> 定義內),命名空間限定性條件為選擇性做法。

若要指定特定區域項目或屬性是否要符合命名空間,請將 form 屬性加入至區域 <element><attribute> 宣告。可能值為 qualifiedunqualified

form 屬性的預設值是繼承自根 <schema> 項目的 elementFormDefaultattributeFormDefault 屬性。那兩個屬性的預設值為 unqualified

.NET Framework 無法在類別定義中指定全域或結構描述層級的表單。相反地,從一組類別產生 XML 結構描述文件時,Xsd.exe 永遠會產生具有下列特性的 XML 結構描述:

  • 不會指定 attributeFormDefault,改為還原至預設值 unqualified

  • 有效地使用不同於 XML 結構描述的預設值,以指定 elementFormDefault="qualified"

Xsd.exe 會以每個欄位為基礎來設定表單,以回應 attributeFormDefault="qualified"elementFormDefault="unqualified" 預設值的替代值

Xsd.exe 會根據這些條件約束,從 form 屬性產生原始程式碼,如下表所示。

form 屬性

form="qualified"

form="unqualified"

<attribute> element

XmlAttribute 屬性宣告會傳遞 Form=XmlSchemaForm.Qualified 參數。

<attribute> 欄位的 XmlAttribute 屬性宣告不會傳遞表單參數。

<element> element

除非傳遞不相關的參數,否則不會套用 XmlElement 屬性。

<element> 欄位的 XmlElement 屬性宣告會傳遞參數 Form=XmlSchemaForm.Unqualified

傳遞至 XmlAttributeXmlElement 宣告的參數會設定 Form 屬性,而此屬性的可能值來自 XmlSchemaForm 列舉型別 (Enumeration):

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None:預設

如果在原本的 XML 結構描述文件中表單是設定為非預設值,則只會在原始程式碼中根據 .NET Framework 預設值 (而非 XML 結構描述預設值) 指定表單。由於 form 屬性會覆寫 attributeFormDefaultelementFormDefault 屬性,因此,如果結構描述將表單設定為 <schema> 層級的非預設值,然後又設定為 <attribute><element> 層級的預設值,便會產生未指定表單的原始檔。對於遵循執行個體文件方面,也具有相同的意義。

範例

輸入 XML 結構描述文件:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
  <xsd:element name="ComplexInstance" type="MyComplexType"/>
  <xsd:complexType name="MyComplexType">
    <xsd:sequence>
      <xsd:element name="elementQ" type="xsd:decimal" form="qualified" />
      <xsd:element name="elementU" type="xsd:Date" form="unqualified" />
    </xsd:sequence>
    <xsd:attribute name="attributeQ" type="xsd:string"  use="required" form="qualified"/>
    <xsd:attribute name="attributeU" type="xsd:boolean" use="required" form="unqualified"/>
  </xsd:complexType>
</xsd:schema>

由前面的 XML 結構描述文件所產生的 C# 類別:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("ComplexInstance", Namespace="http://example.org/", IsNullable=false)]
 public class MyComplexType {
        
     public System.Decimal elementQ;
        
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string elementU;
        
    [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public string attributeQ;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public bool attributeU;
}

編譯自前面 C# 原始檔而得之組件所產生的 XML 結構描述文件:

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="ComplexInstance" type="tns:MyComplexType" />
  <xs:complexType name="MyComplexType">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="1" name="elementQ" type="xs:decimal" />
      <xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="elementU" type="xs:string" />
    </xs:sequence>
    <xs:attribute form="qualified" name="attributeQ" type="xs:string" />
    <xs:attribute name="attributeU" type="xs:boolean" use="required" />
  </xs:complexType>
</xs:schema>

可能的包含項目:<attribute><element>

請參閱

參考

System.Xml.Schema.XmlSchemaAttribute.Form
System.Xml.Schema.XmlSchemaElement.Form

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.