Any 項目繫結支援
本主題專門說明舊有技術。 應該使用下列建立 XML Web Service 及 XML Web Service 用戶端: Windows Communication Foundation.
.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 結構描述定義或類別期間,namespace 和 processContents 屬性會被忽略。也就是說,在原本的 XML 結構描述定義中,無論那些屬性值為何,當 Xsd.exe 從該定義產生類別,然後從那些類別產生其他 XML 結構描述時,所產生 XML 結構描述的 <any> 項目都不再具有那些屬性。因此,後面的結構描述會還原至下列預設值:
namespace="##any"
:namespace 屬性會指定必須定義項目的命名空間。##any
的值允許任何命名空間。processContents="strict"
:驗證執行個體 XML 文件是否符合文件指定的 XML 結構描述時,請務必根據指定的命名空間驗證所有項目型別。如果項目型別無法辨識,驗證就會失敗。
同樣地,從 XML 文件還原序列化 (Deserialization) 至物件期間,namespace 和 processContents 屬性也會被忽略。反而是 XmlSerializer 類別的行為表現得就像這兩個屬性已固定為下列值一樣:
namespace="##any"
:這是預設值。processContents="lax"
:驗證執行個體 XML 文件是否符合文件指定的 XML 結構描述時,只有在可以取得項目的命名空間時,才會驗證該項目,否則,請確定無法辨識的項目是由語式正確 (Well-Formed) 的 XML 所組成。
注意: |
---|
雖然在執行階段 .NET Framework 假設 processContents="lax" ,但是在部署階段,.NET Framework 還是會產生 XML 結構描述定義,而且其中隱含地指定預設的 processContents="strict" 。
|
當 namespace 和 processContents 屬性出現在 <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 屬性產生 請參閱 MinOccurs 屬性繫結支援 屬性。 |
namespace |
請參閱本主題的「namespace 和 processContents 屬性」一節。 |
processContents |
請參閱本主題的「namespace 和 processContents 屬性」一節。 |
可能的父項目:<choice>、<sequence>
可能的子項目:<annotation>