XmlSchemaValidator.ValidateEndElement Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Verifica se il contenuto di testo dell'elemento è valido in base al relativo tipo di dati per gli elementi con contenuto semplice e verifica se il contenuto dell'elemento corrente è completo per gli elementi con contenuto complesso.
Overload
| Nome | Descrizione |
|---|---|
| ValidateEndElement(XmlSchemaInfo) |
Verifica se il contenuto di testo dell'elemento è valido in base al relativo tipo di dati per gli elementi con contenuto semplice e verifica se il contenuto dell'elemento corrente è completo per gli elementi con contenuto complesso. |
| ValidateEndElement(XmlSchemaInfo, Object) |
Verifica se il contenuto di testo dell'elemento specificato è valido in base al relativo tipo di dati. |
ValidateEndElement(XmlSchemaInfo)
- Origine:
- XmlSchemaValidator.cs
- Origine:
- XmlSchemaValidator.cs
- Origine:
- XmlSchemaValidator.cs
- Origine:
- XmlSchemaValidator.cs
- Origine:
- XmlSchemaValidator.cs
Verifica se il contenuto di testo dell'elemento è valido in base al relativo tipo di dati per gli elementi con contenuto semplice e verifica se il contenuto dell'elemento corrente è completo per gli elementi con contenuto complesso.
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
Parametri
- schemaInfo
- XmlSchemaInfo
Oggetto XmlSchemaInfo le cui proprietà vengono impostate in caso di esito positivo della convalida dell'elemento. Questo parametro può essere null.
Restituisce
Valore di testo analizzato e tipizzato dell'elemento se l'elemento ha contenuto semplice.
Eccezioni
Il contenuto dell'elemento non è valido.
Il ValidateEndElement metodo non è stato chiamato nella sequenza corretta. Ad esempio, se il ValidateEndElement metodo viene chiamato dopo aver chiamato SkipToEndElement(XmlSchemaInfo).
Commenti
Di seguito sono riportate note importanti da considerare quando si usa il ValidateEndElement metodo .
Per gli elementi con contenuto semplice, il ValidateEndElement metodo verifica che il contenuto di testo dell'elemento sia valido in base al tipo di dati e restituisca il valore tipizzato analizzato. Il contenuto di testo dell'elemento viene ottenuto dai risultati delle chiamate precedenti a ValidateText.
Per gli elementi con contenuto complesso, il ValidateEndElement metodo verifica se il contenuto dell'elemento corrente è completo.
Se l'elemento ha un valore predefinito, il valore restituito dal ValidateEndElement metodo è il valore predefinito per l'elemento.
Se l'oggetto XmlSchemaValidator è stato costruito con il ProcessIdentityConstraints valore come parametro, il ValidateEndElement metodo controlla le regole del vincolo Identity (se presenti) che si applicano all'elemento.
Se l'elemento viene convalidato correttamente nel contesto corrente, le XmlSchemaInfo proprietà dell'oggetto MemberType(se specificato), IsDefaulte Validity vengono impostate con i risultati della convalida.
Vedi anche
Si applica a
ValidateEndElement(XmlSchemaInfo, Object)
- Origine:
- XmlSchemaValidator.cs
- Origine:
- XmlSchemaValidator.cs
- Origine:
- XmlSchemaValidator.cs
- Origine:
- XmlSchemaValidator.cs
- Origine:
- XmlSchemaValidator.cs
Verifica se il contenuto di testo dell'elemento specificato è valido in base al relativo tipo di dati.
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
Parametri
- schemaInfo
- XmlSchemaInfo
Oggetto XmlSchemaInfo le cui proprietà vengono impostate in caso di esito positivo della convalida del contenuto di testo dell'elemento. Questo parametro può essere null.
- typedValue
- Object
Contenuto di testo tipizzato dell'elemento.
Restituisce
Contenuto semplice tipizzato dell'elemento analizzato.
Eccezioni
Il contenuto di testo dell'elemento non è valido.
Il ValidateEndElement metodo non è stato chiamato nella sequenza corretta( ad esempio, se il ValidateEndElement metodo viene chiamato dopo la chiamata SkipToEndElement(XmlSchemaInfo)), le chiamate al ValidateText metodo sono state eseguite in precedenza o l'elemento ha contenuto complesso.
Il parametro di contenuto di testo tipizzato non può essere null.
Esempio
Nell'esempio seguente viene convalidato il contosoBooks.xml file rispetto allo contosoBooks.xsd schema. Nell'esempio viene utilizzata la XmlSerializer classe per deserializzare il contosoBooks.xml file e passare il valore dei nodi ai metodi della XmlSchemaValidator classe .
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
L'esempio accetta il file contosoBooks.xml come input.
<?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>
L'esempio accetta anche contosoBooks.xsd come input.
<?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>
Commenti
Importante
Se si esegue la convalida rispetto ai xs:keyvincoli di identità , xs:keyrefo xs:unique , non usare l'overload del ValidateEndElement metodo . Chiamare invece il ValidateText metodo e passarlo al valore dell'elemento. Chiamare quindi l'overload del ValidateEndElement metodo , che accetta XmlSchemaInfo come argomento , per verificare che il contenuto di testo dell'elemento sia valido in base al relativo tipo di dati.
Di seguito sono riportate note importanti da considerare quando si usa il ValidateEndElement metodo .
Per gli elementi con contenuto semplice, il XmlSchemaValidator.ValidateEndElement metodo verifica che il contenuto di testo dell'elemento sia valido in base al tipo di dati e restituisca il valore tipizzato analizzato. Il contenuto di testo dell'elemento viene ottenuto dal contenuto tipizzato passato come parametro.
Se le chiamate al ValidateText metodo sono state effettuate in precedenza, viene generata un'eccezione InvalidOperationException .
Se l'elemento ha contenuto complesso, viene generata un'eccezione InvalidOperationException .
Se l'oggetto XmlSchemaValidator è stato costruito con il ProcessIdentityConstraints valore come parametro, il ValidateEndElement metodo controlla le regole del vincolo Identity (se presenti) che si applicano all'elemento.
Se l'elemento viene convalidato correttamente nel contesto corrente, le XmlSchemaInfo proprietà dell'oggetto MemberType(se specificato), IsDefaulte Validity vengono impostate con i risultati della convalida.