다음을 통해 공유


Any 요소의 바인딩 지원

이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. Windows Communication Foundation.

.NET Framework에서는 <any> 요소에 대한 부분 바인딩 지원을 제공합니다.

XML 스키마 문서에서 소스 코드를 생성할 경우 Xsd.exe는 XmlAnyElementAttribute 특성을 사용하여 <any> 요소를 XmlElement 형식 필드로 변환합니다.

설명

<any> 와일드카드를 사용하면 약간의 제약은 있지만 모든 요소(모든 이름 또는 형식의 요소)를 XML 인스턴스 문서의 지정된 위치에 사용할 수 있습니다.

XML 스키마 문서에서 소스 코드를 생성할 경우 Xsd.exe는 XmlAnyElementAttribute 특성을 사용하여 <any> 요소를 XmlElement 형식 필드로 변환합니다. 이 특성을 사용하면 임의의 XML 요소를 클래스의 다른 가능한 필드나 속성으로 식별된 XML이 아닌 형식에 바인딩하지 않고도 클래스에서 이러한 요소를 표시할 수 있습니다.

<any> 요소의 maxOccurs 특성 값이 1보다 크거나 unbounded일 경우, Xsd.exe는 XmlAnyElement 특성을 갖는 XmlElement 배열을 생성합니다. maxOccurs 특성 값이 1(기본값) 또는 0인 경우 단일 XmlElement가 생성됩니다. 이러한 동작에 대한 자세한 내용은 maxOccurs 특성을 참조하십시오.

어셈블리의 클래스 집합에서 XML 스키마 문서를 생성할 경우, Xsd.exe는 역방향 변환을 수행합니다. 즉, XmlAnyElementAttribute 특성을 갖는 System.Xml.XmlElement 형식의 필드나 속성을 <any> 요소로 변환합니다.

namespace 및 processContents 특성

XML 스키마 정의나 클래스를 생성하는 과정에서 namespaceprocessContents 특성은 무시됩니다. 즉, 이러한 특성 값이 원본 XML 스키마 정의에 있더라도, Xsd.exe가 해당 정의에서 클래스를 생성한 다음 이러한 클래스에서 다른 XML 스키마를 생성하는 경우, 생성된 XML 스키마의 <any> 요소에는 이러한 특성이 더 이상 없습니다. 따라서 생성된 스키마는 다음 기본값으로 되돌려집니다.

  • namespace="##any": namespace 특성은 요소를 정의해야 하는 네임스페이스를 지정합니다. ##any 값을 지정하면 모든 네임스페이스를 사용할 수 있습니다.

  • processContents="strict": 인스턴스 XML 문서의 유효성을 검사하여 지정된 스키마를 따르는지 확인할 때, 지정된 네임스페이스에 따라 모든 요소 형식의 유효성을 검사하는지 확인합니다. 요소 형식이 인식되지 않으면 유효성 검사가 실패합니다.

마찬가지로 XML 문서에서 개체로 deserialize하는 동안 namespaceprocessContents 특성이 무시됩니다. 대신, XmlSerializer 클래스는 두 특성이 다음 값으로 고정된 것처럼 동작합니다.

  • namespace="##any": 이 값은 기본값입니다.

  • processContents="lax": 인스턴스 XML 문서의 유효성을 검사하여 지정된 XML 스키마를 따르는지 확인할 때, 네임스페이스를 얻을 수 있는 경우에만 요소의 유효성을 검사합니다. 얻을 수 없는 경우, 인식할 수 없는 요소가 올바른 형식의 XML로 구성되어 있는지 확인합니다.

2w8zbwa2.note(ko-kr,VS.100).gif참고:
런타임에는 .NET Framework에서 processContents="lax"를 가정하지만, 배포할 때는 .NET Framework에서 기본값 processContents="strict"가 암시적으로 지정된 XML 스키마 정의를 생성합니다.

Xsd.exe와 XmlSerializer 클래스에서는 namespaceprocessContents 특성이 <anyAttribute> 요소에 표시될 경우 이러한 특성에 대해 동일한 바인딩을 제공합니다.

예제

입력 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 스키마 문서에서 소스 코드를 생성할 경우 Xsd.exe 도구는 minOccurs 특성이 <any> 요소에 적용된 경우 이 특성을 무시합니다.

클래스에서 XSD 문서를 생성할 경우 Xsd.exe 도구는 <any> 요소에 있는 minOccurs 특성에 대해 0 값을 생성합니다.

MinOccurs 특성의 바인딩 지원 특성을 참조하십시오.

namespace

이 항목의 네임스페이스 및 processContents 특성 단원을 참조하십시오.

processContents

이 항목의 네임스페이스 및 processContents 특성 단원을 참조하십시오.

가능한 부모 요소: <choice>, <sequence>

가능한 자식 요소: <annotation>

참고 항목

참조

XmlSchemaAny