XmlDocument.Validate Method (ValidationEventHandler)
This page is specific to:.NET Framework Version:2.03.03.54.0
.NET Framework Class Library
XmlDocument.Validate Method (ValidationEventHandler)

Note: This method is new in the .NET Framework version 2.0.

Validates the XmlDocument against the XML Schema Definition Language (XSD) schemas contained in the Schemas property.

Namespace: System.Xml
Assembly: System.Xml (in system.xml.dll)

Syntax

'Usage

Dim instance As XmlDocument
Dim validationEventHandler As ValidationEventHandler

instance.Validate(validationEventHandler)

'Declaration

Public Sub Validate ( _
    validationEventHandler As ValidationEventHandler _
)
public void Validate (
    ValidationEventHandler validationEventHandler
)

Parameters

validationEventHandler

The ValidationEventHandler object that receives information about schema validation warnings and errors.

Exceptions

Exception typeCondition

XmlSchemaValidationException

A schema validation event occurred and no ValidationEventHandler object was specified.

Remarks

The Validate method validates the XML data in the XmlDocument against the schemas contained in the Schemas property. The Validate method performs infoset augmentation. Specifically, after successful validation, schema defaults are applied, text values are converted to atomic values as necessary, and type information is associated with validated information items. The result is a previously un-typed XML sub-tree in the XmlDocument replaced with a typed sub-tree.

The following are important notes to consider when using the Validate method.

  • Schema location hints like xsi:schemaLocation or xsi:noNamespaceSchemaLocation are ignored.

  • Inline schemas are ignored.

  • If schema validation errors occur during validation the XmlDocument becomes partially validated with some nodes with correct type information and some without.

  • If the XmlDocument is positioned on the root node, the validation process includes checking of uniqueness and reference constraints (xs:ID, xs:IDREF, xs:key, xs:keyref, and xs:unique); otherwise uniqueness and reference constraints are omitted.

Example

The following example illustrates use of the Validate method. The example creates an XmlDocument that contains an associated XSD schema using the XmlReaderSettings and XmlReader objects. The example then uses the XPathNavigator class to incorrectly modify the typed value of an element in the XML document generating a schema validation error.

Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.Xml.XPath
 
Class XPathValidation

    Shared Sub Main()

        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)
        document.Validate(eventHandler)

        Dim navigator As XPathNavigator = document.CreateNavigator()
        navigator.MoveToFollowing("price", "http://www.contoso.com/books")
        navigator.SetTypedValue(DateTime.Now)

        document.Validate(eventHandler)

    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

The example takes the contosoBooks.xml and contosoBooks.xsd files as input.

<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>
Platforms

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

Version Information

.NET Framework

Supported in: 2.0

.NET Compact Framework

Supported in: 2.0
See Also

Community Content

document.Validate is not being called in the example
Added by:MariaMarcano

The example fails in: navigator.SetTypedValue(DateTime.Now);

if the initial xml has invalid data, it fails in: document.Load(reader);

working example
Added by:MariaMarcano
  

class Program

{

static void Main()

{

XmlDocument document = new XmlDocument();

document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");

document.Load("contosoBooks.xml");

document.Validate(ValidationEventHandler);
XPathNavigator navigator = document.CreateNavigator();

navigator.MoveToFollowing("price", "http://www.contoso.com/books");

navigator.SetValue(DateTime.Now.ToString());

document.Validate(ValidationEventHandler);

}

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;

}

}

}

© 2009 Microsoft Corporation. All rights reserved.   Terms of Use | Trademarks | Privacy Statement
Page view tracker
Rate the Lightweight library
x
Lightweight builds on ScriptFree (loband) by adding features you've requested: a SearchBox and default code language selection.
Do you like the SearchBox?
Do you like the tabbed code blocks?
How useful is this topic?
Tell us more.
Thanks
x
You're helping to improve MSDN Online.
Feedback
Switch View
Classic
Lightweight Beta
ScriptFree
Switch View