共用方式為


Any 項目繫結支援

.NET Framework 會提供 <any> 項目的部分繫結支援。

從 XML 結構描述文件產生原始程式碼時,Xsd.exe 會將 <any> 項目轉譯成 XmlElement 型別欄位並具有屬性 XmlAnyElementAttribute

說明

<any> 萬用字元允許任何項目 (任何名稱或型別的項目) 出現在 XML 執行個體文件 (具有某些條件約束) 的指定位置中。

從 XML 結構描述文件產生原始程式碼時,Xsd.exe 會將 <any> 項目轉譯成 XmlElement 型別欄位並具有屬性 XmlAnyElementAttribute。此屬性 (Attribute) 允許類別呈現任意的 XML 項目,而不會將這些屬性 (Attribute) 繫結至其他可能欄位或類別屬性 (Property) 所識別的非 XML 型別。

如果 <any> 項目的 maxOccurs 屬性值大於 1 或為 unbounded,Xsd.exe 就會產生具有 XmlAnyElement 屬性的 XmlElement 陣列。當 maxOccurs 屬性的值為 1 (預設值) 或 0 時,便會產生單一的 XmlElement。如需此行為的相關說明,請參閱 maxOccurs 屬性。

從組件的一組類別產生 XML 結構描述文件時,Xsd.exe 會執行下列反向轉譯:將具有屬性 (Attribute) XmlAnyElementAttribute 且型別為 System.Xml.XmlElement 的欄位或屬性 (Property) 轉譯成 <any> 項目。

namespace 和 processContents 屬性

在產生 XML 結構描述定義或類別期間,namespaceprocessContents 屬性會被忽略。也就是說,在原本的 XML 結構描述定義中,無論那些屬性值為何,當 Xsd.exe 從該定義產生類別,然後從那些類別產生其他 XML 結構描述時,所產生 XML 結構描述的 <any> 項目都不再具有那些屬性。因此,後面的結構描述會還原至下列預設值:

  • namespace="##any"namespace 屬性會指定必須定義項目的命名空間。##any 的值允許任何命名空間。

  • processContents="strict":驗證執行個體 XML 文件是否符合文件指定的 XML 結構描述時,請務必根據指定的命名空間驗證所有項目型別。如果項目型別無法辨識,驗證就會失敗。

同樣地,從 XML 文件還原序列化 (Deserialization) 至物件期間,namespaceprocessContents 屬性也會被忽略。反而是 XmlSerializer 類別的行為表現得就像這兩個屬性已固定為下列值一樣:

  • namespace="##any":這是預設值。

  • processContents="lax":驗證執行個體 XML 文件是否符合文件指定的 XML 結構描述時,只有在可以取得項目的命名空間時,才會驗證該項目,否則,請確定無法辨識的項目是由語式正確 (Well-Formed) 的 XML 所組成。

Note注意:

雖然在執行階段 .NET Framework 假設 processContents="lax",但是在部署階段,.NET Framework 還是會產生 XML 結構描述定義,而且其中隱含地指定預設的 processContents="strict"

namespaceprocessContents 屬性出現在 <anyAttribute> 項目中時,Xsd.exe 和 XmlSerializer 類別會為這兩個屬性提供相同繫結。

範例

輸入 XML 結構描述文件:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
    <xsd:element name="complexInstance" type="MyComplexType"/>

    <xsd:complexType name="MyComplexType">
        <xsd:sequence>
            <xsd:element name="field1" type="xsd:string"/>
            <xsd:any namespace="##local" processContents="strict"/>
        </xsd:sequence>
    </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 string field1;
        
    [System.Xml.Serialization.XmlAnyElementAttribute()]
    public System.Xml.XmlElement Any;
}

從前面 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="0" maxOccurs="1" name="field1" type="xs:string" />
      <xs:any minOccurs="0" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>
可能的屬性 繫結支援

id

Xsd.exe 公用程式忽略試圖提供唯一識別項的 id 屬性。

maxOccurs

請參閱本主題中的「說明」一節。請參閱 MaxOccurs 屬性繫結支援 屬性。

minOccurs

從 XML 結構描述文件產生原始程式碼時,如果 minOccurs 屬性已套用至 <any> 項目,Xsd.exe 工具會忽略該屬性。

從類別產生 XSD 文件時,Xsd.exe 工具會針對 <any> 項目的 minOccurs 屬性產生 0 值。

請參閱 MinOccurs 屬性繫結支援 屬性。

namespace

請參閱本主題的「namespace 和 processContents 屬性」一節。

processContents

請參閱本主題的「namespace 和 processContents 屬性」一節。

可能的父項目:<choice><sequence>

可能的子項目:<annotation>

請參閱

參考

XmlSchemaAny

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.