Extensions::Validate Method (XDocument^, XmlSchemaSet^, ValidationEventHandler^, Boolean)
Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).
Assembly: System.Xml.Linq (in System.Xml.Linq.dll)
public: [ExtensionAttribute] static void Validate( XDocument^ source, XmlSchemaSet^ schemas, ValidationEventHandler^ validationEventHandler, bool addSchemaInfo )
Parameters
- source
-
Type:
System.Xml.Linq::XDocument^
The XDocument to validate.
- schemas
-
Type:
System.Xml.Schema::XmlSchemaSet^
An XmlSchemaSet to validate against.
- validationEventHandler
-
Type:
System.Xml.Schema::ValidationEventHandler^
A ValidationEventHandler for an event that occurs when the reader encounters validation errors. If null, throws an exception upon validation errors.
- addSchemaInfo
-
Type:
System::Boolean
A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).
| Exception | Condition |
|---|---|
| XmlSchemaValidationException | Thrown for XML Schema Definition Language (XSD) validation errors. |
This extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.
If addSchemaInfo is true, this method populates the XML tree with the post-schema-validation infoset (PSVI).
There are two steps to populating the XML tree with the PSVI.
First, an annotation is added to all nodes in the tree to enable you to call Extensions::GetSchemaInfo or Extensions::GetSchemaInfo on an element or attribute in the tree.
Second, default elements and attributes defined in the XSD are added to the XML tree. By calling one of the GetSchemaInfo methods, you can determine if a specific element or attribute was added from the XSD as a default element or attribute.
The following example contains an XSD that defines the Child2 element with an Att1 attribute with a default value. After successfully validating the document, the attribute with the default value is added to the XML tree. Note that the default attribute is not added to doc2, which does not validate against the schema.
This example produces the following output:
Validating doc1 doc1 validated Validating doc2 The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'. doc2 did not validate Contents of doc1: <Root> <Child1>c1</Child1> <Child2 Att1="Att1 Default Value">c2</Child2> </Root> Contents of doc2: <Root> <Child1>content1</Child1> <Child3>content1</Child3> </Root>
The following example populates the tree with PSVI. After validation, it prints all elements and attributes in the tree that are invalid according to the PSVI.
This example produces the following output:
Validating doc1 ... The 'GrandChild2' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed. The 'GrandChild3' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed. doc1 did not validate Invalid Element /Root Invalid Element /Root/Child1 Invalid Element /Root/Child1/GrandChild2 Invalid Element /Root/Child1/GrandChild3
Available since 3.5