XmlSchemaValidator.ValidateEndElement 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
단순 콘텐츠를 포함하는 요소에 대해 해당 데이터 형식을 기준으로 요소의 텍스트 콘텐츠가 유효한지 확인하고 복합 콘텐츠를 포함하는 요소에 대해 현재 요소의 콘텐츠가 완전한지 확인합니다.
오버로드
ValidateEndElement(XmlSchemaInfo) |
단순 콘텐츠를 포함하는 요소에 대해 해당 데이터 형식을 기준으로 요소의 텍스트 콘텐츠가 유효한지 확인하고 복합 콘텐츠를 포함하는 요소에 대해 현재 요소의 콘텐츠가 완전한지 확인합니다. |
ValidateEndElement(XmlSchemaInfo, Object) |
지정된 요소의 데이터 형식을 기준으로 해당 요소의 텍스트 콘텐츠가 유효한지 확인합니다. |
ValidateEndElement(XmlSchemaInfo)
단순 콘텐츠를 포함하는 요소에 대해 해당 데이터 형식을 기준으로 요소의 텍스트 콘텐츠가 유효한지 확인하고 복합 콘텐츠를 포함하는 요소에 대해 현재 요소의 콘텐츠가 완전한지 확인합니다.
public:
System::Object ^ ValidateEndElement(System::Xml::Schema::XmlSchemaInfo ^ schemaInfo);
public object? ValidateEndElement (System.Xml.Schema.XmlSchemaInfo? schemaInfo);
public object ValidateEndElement (System.Xml.Schema.XmlSchemaInfo schemaInfo);
member this.ValidateEndElement : System.Xml.Schema.XmlSchemaInfo -> obj
Public Function ValidateEndElement (schemaInfo As XmlSchemaInfo) As Object
매개 변수
- schemaInfo
- XmlSchemaInfo
요소의 유효성이 성공적으로 검사될 경우 속성이 설정되는 XmlSchemaInfo 개체입니다. 이 매개 변수는 null
일 수 있습니다.
반환
요소에 단순 콘텐츠가 있는 경우 요소의 구문 분석되고 형식화된 텍스트 값입니다.
예외
요소의 콘텐츠가 유효하지 않은 경우
ValidateEndElement 메서드가 올바른 시퀀스로 호출되지 않은 경우. 예를 들어, ValidateEndElement를 호출한 후 SkipToEndElement(XmlSchemaInfo) 메서드를 호출하는 경우가 여기에 해당합니다.
설명
다음은 메서드를 사용할 때 고려해야 할 중요한 참고 사항입니다 ValidateEndElement .
단순 콘텐츠 ValidateEndElement 가 있는 요소의 경우 메서드는 요소의 텍스트 콘텐츠가 데이터 형식에 따라 유효한지 확인하고 구문 분석된 형식화된 값을 반환합니다. 요소의 텍스트 콘텐츠는 이전 호출 ValidateText결과에서 가져옵니다.
복잡한 콘텐츠가 있는 요소의 경우 메서드는 ValidateEndElement 현재 요소의 콘텐츠가 완료되었는지 확인합니다.
요소에 기본값이 있는 경우 메서드에서 반환된 ValidateEndElement 값은 요소의 기본값입니다.
XmlSchemaValidator 값을 매개 변수 ValidateEndElement 로 사용하여 개체를 ProcessIdentityConstraints 생성한 경우 메서드는 요소에 적용되는 ID 제약 조건 규칙(있는 경우)을 확인합니다.
현재 컨텍스트 XmlSchemaInfo 에서 요소의 유효성이 성공적으로 검사되면 개체의(지정된 경우) IsDefaultMemberType및 Validity 속성이 유효성 검사 결과로 설정됩니다.
추가 정보
적용 대상
ValidateEndElement(XmlSchemaInfo, Object)
지정된 요소의 데이터 형식을 기준으로 해당 요소의 텍스트 콘텐츠가 유효한지 확인합니다.
public:
System::Object ^ ValidateEndElement(System::Xml::Schema::XmlSchemaInfo ^ schemaInfo, System::Object ^ typedValue);
public object? ValidateEndElement (System.Xml.Schema.XmlSchemaInfo? schemaInfo, object typedValue);
public object ValidateEndElement (System.Xml.Schema.XmlSchemaInfo schemaInfo, object typedValue);
member this.ValidateEndElement : System.Xml.Schema.XmlSchemaInfo * obj -> obj
Public Function ValidateEndElement (schemaInfo As XmlSchemaInfo, typedValue As Object) As Object
매개 변수
- schemaInfo
- XmlSchemaInfo
요소의 텍스트 콘텐츠에 대한 유효성이 성공적으로 검사될 경우 속성이 설정되는 XmlSchemaInfo 개체입니다. 이 매개 변수는 null
일 수 있습니다.
- typedValue
- Object
요소의 형식화된 텍스트 콘텐츠입니다.
반환
요소의 구문 분석되고 형식화된 단순 콘텐츠입니다.
예외
요소의 텍스트 콘텐츠가 유효하지 않은 경우
ValidateEndElement 메서드의 호출 순서가 잘못되거나(예: ValidateEndElement를 호출한 후 SkipToEndElement(XmlSchemaInfo)를 호출한 경우), ValidateText 메서드를 이전에 호출했거나, 요소에 복합 콘텐츠가 있는 경우
형식화된 텍스트 콘텐츠 매개 변수가 null
인 경우
예제
다음 예제에서는 스키마에 대해 파일의 contosoBooks.xml
유효성을 검사합니다 contosoBooks.xsd
. 이 예제에서는 XmlSerializer 클래스를 사용하여 contosoBooks.xml
파일을 역직렬화하고 노드 값을 XmlSchemaValidator 클래스의 메서드에 전달합니다.
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using System.Collections;
namespace Microsoft.Samples.Xml.Schema
{
class XmlSchemaValidatorExamples
{
static void Main()
{
// The XML document to deserialize into the XmlSerializer object.
XmlReader reader = XmlReader.Create("contosoBooks.xml");
// The XmlSerializer object.
XmlSerializer serializer = new XmlSerializer(typeof(ContosoBooks));
ContosoBooks books = (ContosoBooks)serializer.Deserialize(reader);
// The XmlSchemaSet object containing the schema used to validate the XML document.
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add("http://www.contoso.com/books", "contosoBooks.xsd");
// The XmlNamespaceManager object used to handle namespaces.
XmlNamespaceManager manager = new XmlNamespaceManager(reader.NameTable);
// Assign a ValidationEventHandler to handle schema validation warnings and errors.
XmlSchemaValidator validator = new XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None);
validator.ValidationEventHandler += new ValidationEventHandler(SchemaValidationEventHandler);
// Initialize the XmlSchemaValidator object.
validator.Initialize();
// Validate the bookstore element, verify that all required attributes are present
// and prepare to validate child content.
validator.ValidateElement("bookstore", "http://www.contoso.com/books", null);
validator.GetUnspecifiedDefaultAttributes(new ArrayList());
validator.ValidateEndOfAttributes(null);
// Get the next exptected element in the bookstore context.
XmlSchemaParticle[] particles = validator.GetExpectedParticles();
XmlSchemaElement nextElement = particles[0] as XmlSchemaElement;
Console.WriteLine("Expected Element: '{0}'", nextElement.Name);
foreach (BookType book in books.Book)
{
// Validate the book element.
validator.ValidateElement("book", "http://www.contoso.com/books", null);
// Get the exptected attributes for the book element.
Console.Write("\nExpected attributes: ");
XmlSchemaAttribute[] attributes = validator.GetExpectedAttributes();
foreach (XmlSchemaAttribute attribute in attributes)
{
Console.Write("'{0}' ", attribute.Name);
}
Console.WriteLine();
// Validate the genre attribute and display its post schema validation information.
if (book.Genre != null)
{
validator.ValidateAttribute("genre", "", book.Genre, schemaInfo);
}
DisplaySchemaInfo();
// Validate the publicationdate attribute and display its post schema validation information.
if (book.PublicationDate != null)
{
validator.ValidateAttribute("publicationdate", "", dateTimeGetter(book.PublicationDate), schemaInfo);
}
DisplaySchemaInfo();
// Validate the ISBN attribute and display its post schema validation information.
if (book.Isbn != null)
{
validator.ValidateAttribute("ISBN", "", book.Isbn, schemaInfo);
}
DisplaySchemaInfo();
// After validating all the attributes for the current element with ValidateAttribute method,
// you must call GetUnspecifiedDefaultAttributes to validate the default attributes.
validator.GetUnspecifiedDefaultAttributes(new ArrayList());
// Verify that all required attributes of the book element are present
// and prepare to validate child content.
validator.ValidateEndOfAttributes(null);
// Validate the title element and its content.
validator.ValidateElement("title", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Title);
// Validate the author element, verify that all required attributes are present
// and prepare to validate child content.
validator.ValidateElement("author", "http://www.contoso.com/books", null);
validator.GetUnspecifiedDefaultAttributes(new ArrayList());
validator.ValidateEndOfAttributes(null);
if (book.Author.Name != null)
{
// Validate the name element and its content.
validator.ValidateElement("name", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Author.Name);
}
if (book.Author.FirstName != null)
{
// Validate the first-name element and its content.
validator.ValidateElement("first-name", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Author.FirstName);
}
if (book.Author.LastName != null)
{
// Validate the last-name element and its content.
validator.ValidateElement("last-name", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Author.LastName);
}
// Validate the content of the author element.
validator.ValidateEndElement(null);
// Validate the price element and its content.
validator.ValidateElement("price", "http://www.contoso.com/books", null);
validator.ValidateEndElement(null, book.Price);
// Validate the content of the book element.
validator.ValidateEndElement(null);
}
// Validate the content of the bookstore element.
validator.ValidateEndElement(null);
// Close the XmlReader object.
reader.Close();
}
static XmlSchemaInfo schemaInfo = new XmlSchemaInfo();
static object dateTimeGetterContent;
static object dateTimeGetterHandle()
{
return dateTimeGetterContent;
}
static XmlValueGetter dateTimeGetter(DateTime dateTime)
{
dateTimeGetterContent = dateTime;
return new XmlValueGetter(dateTimeGetterHandle);
}
static void DisplaySchemaInfo()
{
if (schemaInfo.SchemaElement != null)
{
Console.WriteLine("Element '{0}' with type '{1}' is '{2}'",
schemaInfo.SchemaElement.Name, schemaInfo.SchemaType, schemaInfo.Validity);
}
else if (schemaInfo.SchemaAttribute != null)
{
Console.WriteLine("Attribute '{0}' with type '{1}' is '{2}'",
schemaInfo.SchemaAttribute.Name, schemaInfo.SchemaType, schemaInfo.Validity);
}
}
static void SchemaValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("\nError: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("\nWarning: {0}", e.Message);
break;
}
}
}
[XmlRootAttribute("bookstore", Namespace = "http://www.contoso.com/books", IsNullable = false)]
public class ContosoBooks
{
[XmlElementAttribute("book")]
public BookType[] Book;
}
public class BookType
{
[XmlAttributeAttribute("genre")]
public string Genre;
[XmlAttributeAttribute("publicationdate", DataType = "date")]
public DateTime PublicationDate;
[XmlAttributeAttribute("ISBN")]
public string Isbn;
[XmlElementAttribute("title")]
public string Title;
[XmlElementAttribute("author")]
public BookAuthor Author;
[XmlElementAttribute("price")]
public Decimal Price;
}
public class BookAuthor
{
[XmlElementAttribute("name")]
public string Name;
[XmlElementAttribute("first-name")]
public string FirstName;
[XmlElementAttribute("last-name")]
public string LastName;
}
}
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.Serialization
Imports System.Collections
Namespace Microsoft.Samples.Xml.Schema
Class XmlSchemaValidatorExamples
Shared Sub Main()
' The XML document to deserialize into the XmlSerializer object.
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml")
' The XmlSerializer object.
Dim serializer As XmlSerializer = New XmlSerializer(GetType(ContosoBooks))
Dim books As ContosoBooks = CType(serializer.Deserialize(reader), ContosoBooks)
' The XmlSchemaSet object containing the schema used to validate the XML document.
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add("http://www.contoso.com/books", "contosoBooks.xsd")
' The XmlNamespaceManager object used to handle namespaces.
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(reader.NameTable)
' Assign a ValidationEventHandler to handle schema validation warnings and errors.
Dim validator As XmlSchemaValidator = New XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None)
'validator.ValidationEventHandler += New ValidationEventHandler(SchemaValidationEventHandler)
AddHandler validator.ValidationEventHandler, AddressOf SchemaValidationEventHandler
' Initialize the XmlSchemaValidator object.
validator.Initialize()
' Validate the bookstore element, verify that all required attributes are present
' and prepare to validate child content.
validator.ValidateElement("bookstore", "http://www.contoso.com/books", Nothing)
validator.GetUnspecifiedDefaultAttributes(New ArrayList())
validator.ValidateEndOfAttributes(Nothing)
' Get the next exptected element in the bookstore context.
Dim particles() As XmlSchemaParticle = validator.GetExpectedParticles()
Dim nextElement As XmlSchemaElement = particles(0)
Console.WriteLine("Expected Element: '{0}'", nextElement.Name)
For Each book As BookType In books.book
' Validate the book element.
validator.ValidateElement("book", "http://www.contoso.com/books", Nothing)
' Get the exptected attributes for the book element.
Console.Write(vbCrLf & "Expected attributes: ")
Dim attributes() As XmlSchemaAttribute = validator.GetExpectedAttributes()
For Each attribute As XmlSchemaAttribute In attributes
Console.Write("'{0}' ", attribute.Name)
Next
Console.WriteLine()
' Validate the genre attribute and display its post schema validation information.
If Not book.Genre Is Nothing Then
validator.ValidateAttribute("genre", "", book.Genre, schemaInfo)
End If
DisplaySchemaInfo()
' Validate the publicationdate attribute and display its post schema validation information.
If Not book.PublicationDate = Nothing Then
validator.ValidateAttribute("publicationdate", "", dateTimeGetter(book.PublicationDate), schemaInfo)
End If
DisplaySchemaInfo()
' Validate the ISBN attribute and display its post schema validation information.
If Not book.Isbn Is Nothing Then
validator.ValidateAttribute("ISBN", "", book.Isbn, schemaInfo)
End If
DisplaySchemaInfo()
' After validating all the attributes for the current element with ValidateAttribute method,
' you must call GetUnspecifiedDefaultAttributes to validate the default attributes.
validator.GetUnspecifiedDefaultAttributes(New ArrayList())
' Verify that all required attributes of the book element are present
' and prepare to validate child content.
validator.ValidateEndOfAttributes(Nothing)
' Validate the title element and its content.
validator.ValidateElement("title", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Title)
' Validate the author element, verify that all required attributes are present
' and prepare to validate child content.
validator.ValidateElement("author", "http://www.contoso.com/books", Nothing)
validator.GetUnspecifiedDefaultAttributes(New ArrayList())
validator.ValidateEndOfAttributes(Nothing)
If Not book.Author.Name Is Nothing Then
' Validate the name element and its content.
validator.ValidateElement("name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.Name)
End If
If Not book.Author.FirstName Is Nothing Then
' Validate the first-name element and its content.
validator.ValidateElement("first-name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.FirstName)
End If
If Not book.Author.LastName Is Nothing Then
' Validate the last-name element and its content.
validator.ValidateElement("last-name", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Author.LastName)
End If
' Validate the content of the author element.
validator.ValidateEndElement(Nothing)
' Validate the price element and its content.
validator.ValidateElement("price", "http://www.contoso.com/books", Nothing)
validator.ValidateEndElement(Nothing, book.Price)
' Validate the content of the book element.
validator.ValidateEndElement(Nothing)
Next
' Validate the content of the bookstore element.
validator.ValidateEndElement(Nothing)
' Close the XmlReader object.
reader.Close()
End Sub
Shared schemaInfo As XmlSchemaInfo = New XmlSchemaInfo()
Shared dateTimeGetterContent As Object
Shared Function dateTimeGetterHandle() As Object
Return dateTimeGetterContent
End Function
Shared Function dateTimeGetter(ByVal dateTime As DateTime) As XmlValueGetter
dateTimeGetterContent = dateTime
Return New XmlValueGetter(AddressOf dateTimeGetterHandle)
End Function
Shared Sub DisplaySchemaInfo()
If Not schemaInfo.SchemaElement Is Nothing Then
Console.WriteLine("Element '{0}' with type '{1}' is '{2}'", schemaInfo.SchemaElement.Name, schemaInfo.SchemaType, schemaInfo.Validity)
ElseIf Not schemaInfo.SchemaAttribute Is Nothing Then
Console.WriteLine("Attribute '{0}' with type '{1}' is '{2}'", schemaInfo.SchemaAttribute.Name, schemaInfo.SchemaType, schemaInfo.Validity)
End If
End Sub
Shared Sub SchemaValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine(vbCrLf & "Error: {0}", e.Message)
Exit Sub
Case XmlSeverityType.Warning
Console.WriteLine(vbCrLf & "Warning: {0}", e.Message)
Exit Sub
End Select
End Sub
End Class
<XmlRootAttribute("bookstore", Namespace:="http://www.contoso.com/books", IsNullable:=False)> _
Public Class ContosoBooks
<XmlElementAttribute("book")> _
Public book() As BookType
End Class
Public Class BookType
<XmlAttributeAttribute("genre")> _
Public Genre As String
<XmlAttributeAttribute("publicationdate", DataType:="date")> _
Public PublicationDate As DateTime
<XmlAttributeAttribute("ISBN")> _
Public Isbn As String
<XmlElementAttribute("title")> _
Public Title As String
<XmlElementAttribute("author")> _
Public Author As BookAuthor
<XmlElementAttribute("price")> _
Public Price As Decimal
End Class
Public Class BookAuthor
<XmlElementAttribute("name")> _
Public Name As String
<XmlElementAttribute("first-name")> _
Public FirstName As String
<XmlElementAttribute("last-name")> _
Public LastName As String
End Class
End Namespace
이 예제에서는 contosoBooks.xml
파일을 입력으로 사용합니다.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
이 예제에서는 또한 contosoBooks.xsd
를 입력으로 사용합니다.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
설명
중요
또는 xs:unique
xs:keyref
ID 제약 조건에 대해 xs:key
유효성을 검사하는 경우 메서드 오버로드를 ValidateEndElement 사용하지 마세요. 대신 메서드를 ValidateText 호출하고 요소의 값을 전달합니다. 그런 다음 인수로 사용하는 XmlSchemaInfo 메서드 오버로드를 호출 ValidateEndElement 하여 요소의 텍스트 콘텐츠가 해당 데이터 형식에 따라 유효한지 확인합니다.
다음은 메서드를 사용할 ValidateEndElement 때 고려해야 할 중요한 참고 사항입니다.
단순 콘텐츠 XmlSchemaValidator.ValidateEndElement 가 있는 요소의 경우 메서드는 요소의 텍스트 콘텐츠가 데이터 형식에 따라 유효한지 확인하고 구문 분석된 형식화된 값을 반환합니다. 요소의 텍스트 콘텐츠는 매개 변수로 전달된 형식화된 콘텐츠에서 가져옵니다.
이전에 메서드를 ValidateText 호출한 경우 throw InvalidOperationException 됩니다.
요소에 복잡한 콘텐츠가 있는 경우 throw InvalidOperationException 됩니다.
XmlSchemaValidator 값을 매개 변수로 사용하여 개체를 ProcessIdentityConstraints 생성한 경우 메서드는 ValidateEndElement 요소에 적용되는 ID 제약 조건 규칙(있는 경우)을 확인합니다.
현재 컨텍스트 XmlSchemaInfo 에서 요소의 유효성이 성공적으로 검사되면 개체의(지정된 경우) IsDefaultMemberType및 Validity 속성이 유효성 검사 결과와 함께 설정됩니다.