XmlDocument.Validate 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.
Convalida l'oggetto XmlDocument sulla base degli schemi XSD (XML Schema Definition Language) contenuti nella proprietà Schemas.
Overload
Validate(ValidationEventHandler) |
Convalida l'oggetto XmlDocument sulla base degli schemi XSD (XML Schema Definition Language) contenuti nella proprietà Schemas. |
Validate(ValidationEventHandler, XmlNode) |
Convalida l'oggetto XmlNode specificato sulla base degli schemi XSD (XML Schema Definition Language) nella proprietà Schemas. |
Validate(ValidationEventHandler)
- Origine:
- XmlDocument.cs
- Origine:
- XmlDocument.cs
- Origine:
- XmlDocument.cs
Convalida l'oggetto XmlDocument sulla base degli schemi XSD (XML Schema Definition Language) contenuti nella proprietà Schemas.
public:
void Validate(System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public void Validate (System.Xml.Schema.ValidationEventHandler? validationEventHandler);
public void Validate (System.Xml.Schema.ValidationEventHandler validationEventHandler);
member this.Validate : System.Xml.Schema.ValidationEventHandler -> unit
Public Sub Validate (validationEventHandler As ValidationEventHandler)
Parametri
- validationEventHandler
- ValidationEventHandler
Oggetto ValidationEventHandler che riceve le informazioni sugli avvisi e gli errori relativi alla convalida degli schemi.
Eccezioni
Si è verificato un evento di convalida dello schema e non era specificato alcun oggetto ValidationEventHandler.
Esempio
Nell'esempio riportato di seguito viene illustrato l'utilizzo del metodo Validate. Nell'esempio viene creato un XmlDocument oggetto contenente uno schema XSD associato usando gli XmlReaderSettings oggetti e XmlReader . Nell'esempio viene quindi utilizzata la XPathNavigator classe per modificare erroneamente il valore tipizzato di un elemento nel documento XML che genera un errore di convalida dello schema.
#using <System.Xml.dll>
using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;
using namespace System::Xml::XPath;
class XPathValidation
{
public:
static void Main()
{
try
{
XmlReaderSettings^ settings = gcnew XmlReaderSettings();
settings->Schemas->Add("http://www.contoso.com/books", "contosoBooks.xsd");
settings->ValidationType = ValidationType::Schema;
XmlReader^ reader = XmlReader::Create("contosoBooks.xml", settings);
XmlDocument^ document = gcnew XmlDocument();
document->Load(reader);
ValidationEventHandler^ eventHandler = gcnew ValidationEventHandler(ValidationEventHandlerOne);
// the following call to Validate succeeds.
document->Validate(eventHandler);
// add a node so that the document is no longer valid
XPathNavigator^ navigator = document->CreateNavigator();
navigator->MoveToFollowing("price", "http://www.contoso.com/books");
XmlWriter^ writer = navigator->InsertAfter();
writer->WriteStartElement("anotherNode", "http://www.contoso.com/books");
writer->WriteEndElement();
writer->Close();
// the document will now fail to successfully validate
document->Validate(eventHandler);
}
catch(Exception^ ex)
{
Console::WriteLine(ex->Message);
}
}
static void ValidationEventHandlerOne(Object^ sender, ValidationEventArgs^ e)
{
switch (e->Severity)
{
case XmlSeverityType::Error:
Console::WriteLine("Error: {0}", e->Message);
break;
case XmlSeverityType::Warning:
Console::WriteLine("Warning {0}", e->Message);
break;
}
}
};
int main()
{
XPathValidation::Main();
Console::ReadLine();
return 0;
};
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.XPath;
class XPathValidation
{
static void Main()
{
try
{
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("contosoBooks.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler);
// the following call to Validate succeeds.
document.Validate(eventHandler);
// add a node so that the document is no longer valid
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToFollowing("price", "http://www.contoso.com/books");
XmlWriter writer = navigator.InsertAfter();
writer.WriteStartElement("anotherNode", "http://www.contoso.com/books");
writer.WriteEndElement();
writer.Close();
// the document will now fail to successfully validate
document.Validate(eventHandler);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void ValidationEventHandler(object sender, ValidationEventArgs e)
{
switch (e.Severity)
{
case XmlSeverityType.Error:
Console.WriteLine("Error: {0}", e.Message);
break;
case XmlSeverityType.Warning:
Console.WriteLine("Warning {0}", e.Message);
break;
}
}
}
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath
Class XPathValidation
Shared Sub Main()
Try
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml", settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim eventHandler As ValidationEventHandler = New ValidationEventHandler(AddressOf ValidationEventHandler)
' the following call to Validate succeeds.
document.Validate(eventHandler)
' add a node so that the document is no longer valid
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToFollowing("price", "http://www.contoso.com/books")
Dim writer As XmlWriter = navigator.InsertAfter()
writer.WriteStartElement("anotherNode", "http://www.contoso.com/books")
writer.WriteEndElement()
writer.Close()
' the document will now fail to successfully validate
document.Validate(eventHandler)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Shared Sub ValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
Select Case e.Severity
Case XmlSeverityType.Error
Console.WriteLine("Error: {0}", e.Message)
Case XmlSeverityType.Warning
Console.WriteLine("Warning {0}", e.Message)
End Select
End Sub
End Class
L'esempio accetta i contosoBooks.xml
file e contosoBooks.xsd
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>
<?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
Il Validate metodo convalida i dati XML nell'oggetto XmlDocument rispetto agli schemi contenuti nella Schemas proprietà . Il Validate metodo esegue l'aumento dell'infoset. In particolare, dopo la convalida, vengono applicate le impostazioni predefinite dello schema, i valori di testo vengono convertiti in valori atomici in base alle esigenze e le informazioni sul tipo sono associate agli elementi di informazioni convalidati. Il risultato è un sottoalbero XML non tipizzato in precedenza nell'albero XmlDocument secondario sostituito con un sottoalbero tipizzato.
Di seguito sono riportate note importanti da considerare quando si usa il Validate metodo .
Gli hint per la posizione dello schema, ad esempio
xsi:schemaLocation
oxsi:noNamespaceSchemaLocation
vengono ignorati.Gli schemi inline vengono ignorati.
Se si verificano errori di convalida dello schema durante la convalida, l'oggetto XmlDocument viene convalidato parzialmente con alcuni nodi con informazioni sul tipo corrette e alcuni senza.
Il processo di convalida include la verifica dell'univocità e dei vincoli di riferimento (
xs:ID
,xs:IDREF
,xs:key
,xs:keyref
exs:unique
).
Si applica a
Validate(ValidationEventHandler, XmlNode)
- Origine:
- XmlDocument.cs
- Origine:
- XmlDocument.cs
- Origine:
- XmlDocument.cs
public:
void Validate(System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, System::Xml::XmlNode ^ nodeToValidate);
public void Validate (System.Xml.Schema.ValidationEventHandler? validationEventHandler, System.Xml.XmlNode nodeToValidate);
public void Validate (System.Xml.Schema.ValidationEventHandler validationEventHandler, System.Xml.XmlNode nodeToValidate);
member this.Validate : System.Xml.Schema.ValidationEventHandler * System.Xml.XmlNode -> unit
Public Sub Validate (validationEventHandler As ValidationEventHandler, nodeToValidate As XmlNode)
Parametri
- validationEventHandler
- ValidationEventHandler
Oggetto ValidationEventHandler che riceve le informazioni sugli avvisi e gli errori relativi alla convalida degli schemi.
- nodeToValidate
- XmlNode
Oggetto XmlNode creato da un oggetto XmlDocument da convalidare.
Eccezioni
Il parametro dell'oggetto XmlNode non è stato creato da un XmlDocument.
Il parametro dell'oggetto XmlNode non è un elemento, attributo, frammento di documento o il nodo radice.
Si è verificato un evento di convalida dello schema e non era specificato alcun oggetto ValidationEventHandler.
Esempio
Per un esempio del Validate metodo , vedere il Validate metodo .
Commenti
Il Validate metodo convalida i dati XML nell'oggetto XmlNode rispetto agli schemi contenuti nella Schemas proprietà . Il Validate metodo esegue l'aumento dell'infoset. In particolare, dopo la convalida, vengono applicate le impostazioni predefinite dello schema, i valori di testo vengono convertiti in valori atomici in base alle esigenze e le informazioni sul tipo sono associate agli elementi di informazioni convalidati. Il risultato è un sottoalbero XML non tipizzato in precedenza nell'albero XmlDocument secondario sostituito con un sottoalbero tipizzato.
Di seguito sono riportate note importanti da considerare quando si usa il Validate metodo .
Gli hint per la posizione dello schema, ad esempio
xsi:schemaLocation
oxsi:noNamespaceSchemaLocation
vengono ignorati.Gli schemi inline vengono ignorati.
Se si verificano errori di convalida dello schema durante la convalida, l'oggetto XmlDocument viene convalidato parzialmente con alcuni nodi con informazioni sul tipo corrette e alcuni senza.
Se il nodo da convalidare è il nodo radice, il processo di convalida include la verifica dell'univocità e dei vincoli di riferimento (xs:ID
, xs:IDREF
, xs:key
, xs:keyref
e xs:unique
); in caso contrario, vengono omessi vincoli di univocità e riferimento.