Extensions.Validate Metoda

Definicja

Sprawdza, czy XDocumentelement XElement, a lub jest XAttribute zgodny z XSD w XmlSchemaSet.Validates that an XDocument, an XElement, or an XAttribute conforms to an XSD in an XmlSchemaSet.

Przeciążenia

Validate(XDocument, XmlSchemaSet, ValidationEventHandler)

Ta metoda sprawdza, czy jest XDocument zgodna z XSD XmlSchemaSetw.This method validates that an XDocument conforms to an XSD in an XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

Ta metoda sprawdza, czy XAttribute zgodne z określoną XmlSchemaObject i XmlSchemaSet.This method validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet.

Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean)

Sprawdza, czy jest XDocument zgodna z elementem XSD XmlSchemaSetw, opcjonalnie wypełniając drzewo XML za pomocą sprawdzonych po schemacie walidacji (PSVI).Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

Ta metoda sprawdza, czy poddrzewo jest XElement zgodne z określoną XmlSchemaObject i XmlSchemaSet.This method validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

Sprawdza, czy XAttribute zgodne z określoną XmlSchemaObject i XmlSchemaSet, opcjonalnie wypełniają drzewo XML za pomocą sprawdzonych po schemacie walidacji (PSVI).Validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

Sprawdza, czy poddrzewo jest XElement zgodne z określoną XmlSchemaObject i XmlSchemaSet, opcjonalnie wypełniając drzewo XML sprawdzonychem po schemacie walidacji (PSVI).Validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Uwagi

Metody te używają bazowego XmlReader do walidacji drzewa XML względem XSD.These methods use an underlying XmlReader to validate the XML tree against an XSD.

Błędy walidacji i komunikaty ostrzegawcze są obsługiwane ValidationEventHandler za pomocą delegata.Validation error and warning messages are handled using the ValidationEventHandler delegate. Jeśli do tych metod nie zostanie dostarczona procedura obsługi zdarzeń, błędy walidacji są XmlSchemaValidationExceptionujawniane jako.If no event handler is provided to these methods, validation errors are exposed as an XmlSchemaValidationException. Ostrzeżenia dotyczące walidacji nie powodują XmlSchemaValidationException , że mogą być zgłaszane.Validation warnings do not cause an XmlSchemaValidationException to be thrown.

Niektóre z tych metod rozszerzających opcjonalnie umożliwiają zapełnianie po schemacie walidacji sprawdzonych (PSVI).Some of these extension methods optionally allow population of the post-schema-validation infoset (PSVI).

Validate(XDocument, XmlSchemaSet, ValidationEventHandler)

Ta metoda sprawdza, czy jest XDocument zgodna z XSD XmlSchemaSetw.This method validates that an XDocument conforms to an XSD in an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XDocument ^ source, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XDocument * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

Parametry

source
XDocument

XDocument Do walidacji.The XDocument to validate.

schemas
XmlSchemaSet

XmlSchemaSet Aby sprawdzić poprawność.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

A ValidationEventHandler dla zdarzenia, które występuje, gdy czytnik napotyka błędy walidacji.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Jeśli null, zgłasza wyjątek po błędach walidacji.If null, throws an exception upon validation errors.

Wyjątki

Zgłoszono dla błędów walidacji języka definicji schematu XML (XSD).Thrown for XML Schema Definition Language (XSD) validation errors.

Przykłady

Poniższy przykład tworzy XmlSchemaSet, a następnie weryfikuje dwa XDocument obiekty względem zestawu schematów.The following example creates an XmlSchemaSet, then validates two XDocument objects against the schema set. Jeden z dokumentów jest prawidłowy, drugi nie jest.One of the documents is valid, the other is not.

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child2", "content1")  
    )  
);  
  
XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  
  
Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
    <?xml version='1.0'?>  
    <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
        <xsd:element name='Root'>  
            <xsd:complexType>  
                <xsd:sequence>  
                    <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                    <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/>  
                </xsd:sequence>  
            </xsd:complexType>  
        </xsd:element>  
    </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = _  
    <?xml version='1.0'?>  
    <Root>  
        <Child1>content1</Child1>  
        <Child2>content2</Child2>  
    </Root>  
  
    Dim doc2 As XDocument = _  
    <?xml version='1.0'?>  
    <Root>  
        <Child1>content1</Child1>  
        <Child3>content1</Child3>  
    </Root>  
  
    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

Ten przykład generuje następujące wyniki: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  

Uwagi

Ta metoda rozszerzenia sprawdza, czy jest XDocument zgodna z modelem zawartości schematu w programie. XmlSchemaSetThis extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

Ta metoda sprawdza, czy XAttribute zgodne z określoną XmlSchemaObject i XmlSchemaSet.This method validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XAttribute ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XAttribute * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

Parametry

source
XAttribute

XAttribute Do walidacji.The XAttribute to validate.

partialValidationType
XmlSchemaObject

XmlSchemaObject Określa poddrzewo do zweryfikowania.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

XmlSchemaSet Aby sprawdzić poprawność.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

A ValidationEventHandler dla zdarzenia, które występuje, gdy czytnik napotyka błędy walidacji.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Jeśli null, zgłasza wyjątek po błędach walidacji.If null, throws an exception upon validation errors.

Wyjątki

Zgłoszono dla błędów walidacji języka definicji schematu XML (XSD).Thrown for XML Schema Definition Language (XSD) validation errors.

Przykłady

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:simpleContent>  
          <xsd:extension base='xsd:string'>  
           <xsd:attribute name='Lang' use='required'>  
            <xsd:simpleType>  
             <xsd:restriction base='xsd:token'>  
              <xsd:enumeration value='C#'/>  
              <xsd:enumeration value='VB'/>  
             </xsd:restriction>  
            </xsd:simpleType>  
           </xsd:attribute>  
          </xsd:extension>  
         </xsd:simpleContent>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XAttribute("Lang", "C#")  
    )  
);  
  
Console.WriteLine("Validating doc1 ...");  
bool errors = false;  
doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating Lang attribute ...");  
XAttribute lang = doc1.Root.Attribute("Lang");  
  
errors = false;  
lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
  
// the following makes the Lang attribute invalid according to the schema  
lang.Value = "VC";  
  
Console.WriteLine();  
Console.WriteLine("Validating Lang attribute ...");  
  
errors = false;  
lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
      <?xml version='1.0'?>  
      <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
          <xsd:element name='Root'>  
              <xsd:complexType>  
                  <xsd:simpleContent>  
                      <xsd:extension base='xsd:string'>  
                          <xsd:attribute name='Lang' use='required'>  
                              <xsd:simpleType>  
                                  <xsd:restriction base='xsd:token'>  
                                      <xsd:enumeration value='C#'/>  
                                      <xsd:enumeration value='VB'/>  
                                  </xsd:restriction>  
                              </xsd:simpleType>  
                          </xsd:attribute>  
                      </xsd:extension>  
                  </xsd:simpleContent>  
              </xsd:complexType>  
          </xsd:element>  
      </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root Lang='C#'/>  
  
    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
    Dim lang As XAttribute = doc1.Root.Attribute("Lang")  
  
    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
  
    ' the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC"  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
  
    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

Ten przykład generuje następujące wyniki:This example produces the following output:

Validating doc1 ...  
doc1 validated  
  
Validating Lang attribute ...  
lang validated  
  
Validating Lang attribute ...  
The 'Lang' attribute is invalid - The value 'VC' is invalid according to its datatype 'Token' - The Enumeration constraint failed.  
lang did not validate  

Uwagi

Tej metody można użyć do sprawdzenia, czy jest XAttribute zgodny ze schematem.You can use this method to validate that an XAttribute conforms to a schema. Ta metoda jest używana zazwyczaj, gdy zmodyfikowano atrybut i chcesz się upewnić, że nadal jest zgodne ze schematem.You typically use this method when you have modified an attribute, and you want to make sure that it still conforms to its schema. Można sprawdzić poprawność całego dokumentu, ale trwa krótszy czas przetwarzania, aby sprawdzić poprawność tylko atrybutu.You could validate the entire document, but it takes less processing time to validate just the attribute.

Jeśli zostanie przekazany null do validationEventHandler, ta metoda zgłasza wyjątek po błędach walidacji.If you pass null for validationEventHandler, this method raises an exception upon validation errors. Ostrzeżenia dotyczące walidacji nie spowodują zgłoszenia wyjątku.Validation warnings will not raise an exception.

Aby sprawdzić poprawność atrybutu, należy użyć wystąpienia XmlSchemaObject.To validate an attribute, you use an instance of XmlSchemaObject. To wystąpienie można uzyskać na różne sposoby.You can obtain this instance in various ways. Oto prosty sposób:An easy way is as follows:

  1. Sprawdź, czy dokument jest zgodny ze schematem.Validate that a document conforms to a schema.

  2. Dodaj wartość sprawdzonych (PSVI) po zakończeniu procesu, wywołując Validate metodę rozszerzenia.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. Wywołaj metodę IXmlSchemaInfo rozszerzającą,abypobraćobiektGetSchemaInfo , który implementuje.Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. Z pobranego obiektu można uzyskać XmlSchemaObject.From the retrieved object, you can get an XmlSchemaObject.

Po wystąpieniu XmlSchemaObjectprogramu można użyć tej metody do walidacji atrybutu.After you have an instance of an XmlSchemaObject, you can use this method to validate an attribute.

Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean)

Sprawdza, czy jest XDocument zgodna z elementem XSD XmlSchemaSetw, opcjonalnie wypełniając drzewo XML za pomocą sprawdzonych po schemacie walidacji (PSVI).Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XDocument ^ source, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XDocument * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

Parametry

source
XDocument

XDocument Do walidacji.The XDocument to validate.

schemas
XmlSchemaSet

XmlSchemaSet Aby sprawdzić poprawność.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

A ValidationEventHandler dla zdarzenia, które występuje, gdy czytnik napotyka błędy walidacji.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Jeśli null, zgłasza wyjątek po błędach walidacji.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

Boolean Wskazuje, czy ma zostać wypełniona sprawdzonych weryfikacji (PSVI).A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

Wyjątki

Zgłoszono dla błędów walidacji języka definicji schematu XML (XSD).Thrown for XML Schema Definition Language (XSD) validation errors.

Przykłady

Poniższy przykład zawiera XSD, który definiuje Child2 element Att1 z atrybutem o wartości domyślnej.The following example contains an XSD that defines the Child2 element with an Att1 attribute with a default value. Po pomyślnym zweryfikowaniu dokumentu atrybut z wartością domyślną zostanie dodany do drzewa XML.After successfully validating the document, the attribute with the default value is added to the XML tree. Należy zauważyć, że domyślny atrybut nie jest dodawany doc2do, co nie jest sprawdzane względem schematu.Note that the default attribute is not added to doc2, which does not validate against the schema.

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:simpleContent>  
             <xsd:extension base='xsd:string'>  
              <xsd:attribute name='Att1' default='Att1 Default Value'/>  
             </xsd:extension>  
            </xsd:simpleContent>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "c1"),  
        new XElement("Child2", "c2")  
    )  
);  
  
XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  
  
Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                           {  
                               Console.WriteLine("{0}", e.Message);  
                               errors = true;  
                           }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Contents of doc1:");  
Console.WriteLine(doc1);  
  
Console.WriteLine();  
Console.WriteLine("Contents of doc2:");  
Console.WriteLine(doc2);  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
    <?xml version='1.0'?>  
    <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
        <xsd:element name='Root'>  
            <xsd:complexType>  
                <xsd:sequence>  
                    <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                    <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
                        <xsd:complexType>  
                            <xsd:simpleContent>  
                                <xsd:extension base='xsd:string'>  
                                    <xsd:attribute name='Att1' default='Att1 Default Value'/>  
                                </xsd:extension>  
                            </xsd:simpleContent>  
                        </xsd:complexType>  
                    </xsd:element>  
                </xsd:sequence>  
            </xsd:complexType>  
        </xsd:element>  
    </xsd:schema>  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root>  
                                <Child1>c1</Child1>  
                                <Child2>c2</Child2>  
                            </Root>  
    Dim doc2 As XDocument = <?xml version='1.0'?>  
                            <Root>  
                                <Child1>content1</Child1>  
                                <Child3>content1</Child3>  
                            </Root>  
  
    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Contents of doc1:")  
    Console.WriteLine(doc1)  
  
    Console.WriteLine()  
    Console.WriteLine("Contents of doc2:")  
    Console.WriteLine(doc2)  
End Sub  

Ten przykład generuje następujące wyniki: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>  

Poniższy przykład wypełnia drzewo PSVI.The following example populates the tree with PSVI. Po walidacji drukuje wszystkie elementy i atrybuty w drzewie, które są nieprawidłowe zgodnie z PSVI.After validation, it prints all elements and attributes in the tree that are invalid according to the PSVI.

  
                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  
  
static void Main(string[] args)  
{  
   string xsdMarkup =  
        @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
           <xsd:simpleType name='GCType'>  
            <xsd:restriction base='xsd:token'>  
             <xsd:enumeration value='AAA'/>  
             <xsd:enumeration value='BBB'/>  
            </xsd:restriction>  
           </xsd:simpleType>  
           <xsd:element name='Root'>  
            <xsd:complexType>  
             <xsd:sequence>  
              <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
               <xsd:complexType>  
                <xsd:sequence>  
                 <xsd:element name='GrandChild1' type='GCType'/>  
                 <xsd:element name='GrandChild2' type='GCType'/>  
                 <xsd:element name='GrandChild3' type='GCType'/>  
                </xsd:sequence>  
               </xsd:complexType>  
              </xsd:element>  
             </xsd:sequence>  
            </xsd:complexType>  
           </xsd:element>  
          </xsd:schema>";  
  
    XmlSchemaSet schemas = new XmlSchemaSet();  
    schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
    XDocument doc1 = new XDocument(  
        new XElement("Root",  
            new XElement("Child1",  
                new XElement("GrandChild1", "AAA"),  
                new XElement("GrandChild2", "ZZZ"),  
                new XElement("GrandChild3", "ZZZ")  
            )  
        )  
    );  
  
    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
        {  
            Console.WriteLine(e.Message);  
            errors = true;  
        }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  
  
                Private Sub DumpInvalidNodes(ByVal el As XElement)  
    If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
        Console.WriteLine("Invalid Element {0}", _  
            el _  
            .AncestorsAndSelf _  
            .InDocumentOrder() _  
            .Aggregate("", _  
                Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))  
    End If  
    For Each att As XAttribute In el.Attributes()  
        If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
            Console.WriteLine("Invalid Attribute {0}", _  
                att _  
                .Parent _  
                .AncestorsAndSelf() _  
                .InDocumentOrder() _  
                .Aggregate("", _  
                    Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _  
                    "/@" + att.Name.ToString())  
        End If  
    Next  
    For Each child As XElement In el.Elements()  
        DumpInvalidNodes(child)  
    Next  
End Sub  
  
Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:simpleType name='GCType'>  
                <xsd:restriction base='xsd:token'>  
                    <xsd:enumeration value='AAA'/>  
                    <xsd:enumeration value='BBB'/>  
                </xsd:restriction>  
            </xsd:simpleType>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:sequence>  
                                    <xsd:element name='GrandChild1' type='GCType'/>  
                                    <xsd:element name='GrandChild2' type='GCType'/>  
                                    <xsd:element name='GrandChild3' type='GCType'/>  
                                </xsd:sequence>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>  
                <GrandChild1>AAA</GrandChild1>  
                <GrandChild2>ZZZ</GrandChild2>  
                <GrandChild3>ZZZ</GrandChild3>  
            </Child1>  
        </Root>  
  
    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
End Sub  

Ten przykład generuje następujące wyniki: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  

Uwagi

Ta metoda rozszerzenia sprawdza, czy jest XDocument zgodna z modelem zawartości schematu w programie. XmlSchemaSetThis extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.

Jeśli addSchemaInfo jesttrue, ta metoda wypełnia drzewo XML przy użyciu sprawdzonych po schemacie walidacji (PSVI).If addSchemaInfo is true, this method populates the XML tree with the post-schema-validation infoset (PSVI).

Należy wykonać dwa kroki, aby zapełnić drzewo XML PSVI.There are two steps to populating the XML tree with the PSVI.

  1. Najpierw adnotacja jest dodawana do wszystkich węzłów w drzewie, aby umożliwić wywoływanie Extensions.GetSchemaInfo lub Extensions.GetSchemaInfo na element lub atrybut w drzewie.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.

  2. Drugie, domyślne elementy i atrybuty zdefiniowane w XSD są dodawane do drzewa XML.Second, default elements and attributes defined in the XSD are added to the XML tree. Wywołując jedną z GetSchemaInfo metod, można określić, czy określony element lub atrybut został dodany z pliku XSD jako domyślny element lub atrybut.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.

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

Ta metoda sprawdza, czy poddrzewo jest XElement zgodne z określoną XmlSchemaObject i XmlSchemaSet.This method validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XElement ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XElement * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

Parametry

source
XElement

XElement Do walidacji.The XElement to validate.

partialValidationType
XmlSchemaObject

XmlSchemaObject Określa poddrzewo do zweryfikowania.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

XmlSchemaSet Aby sprawdzić poprawność.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

A ValidationEventHandler dla zdarzenia, które występuje, gdy czytnik napotyka błędy walidacji.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Jeśli null, zgłasza wyjątek po błędach walidacji.If null, throws an exception upon validation errors.

Wyjątki

Zgłoszono dla błędów walidacji języka definicji schematu XML (XSD).Thrown for XML Schema Definition Language (XSD) validation errors.

Przykłady

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:sequence>  
             <xsd:element name='GrandChild1' minOccurs='1' maxOccurs='1'/>  
             <xsd:element name='GrandChild2' minOccurs='1' maxOccurs='2'/>  
            </xsd:sequence>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1",  
            new XElement("GrandChild1", "gc"),  
            new XElement("GrandChild2", "gc")  
        )  
    )  
);  
  
Console.WriteLine("Validating doc1 ...");  
bool errors = false;  
doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating Child1 after first edit ...");  
XElement child1 = doc1.Element("Root").Element("Child1");  
child1.Add(new XElement("GrandChild2", "gc"));  
errors = false;  
child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("child1 {0}", errors ? "did not validate" : "validated");  
  
// the following makes the Child1 element invalid according to the schema  
child1.Add(new XElement("GrandChild3", "gc"));  
Console.WriteLine();  
Console.WriteLine("Validating Child1 after second edit ...");  
child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("child1 {0}", errors ? "did not validate" : "validated");  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:sequence>  
                                    <xsd:element name='GrandChild1' minOccurs='1' maxOccurs='1'/>  
                                    <xsd:element name='GrandChild2' minOccurs='1' maxOccurs='2'/>  
                                </xsd:sequence>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>  
                <GrandChild1>gc</GrandChild1>  
                <GrandChild2>gc</GrandChild2>  
            </Child1>  
        </Root>  
  
    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Child1 after first edit ...")  
    Dim child1 As XElement = doc1.Element("Root").Element("Child1")  
    child1.Add(<GrandChild2>gc</GrandChild2>)  
    errors = False  
    child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, AddressOf XSDErrors)  
    Console.WriteLine("child1 {0}", IIf(errors, "did not validate", "validated"))  
  
    ' the following makes the Child1 element invalid according to the schema  
    child1.Add(<GrandChild3>gc</GrandChild3>)  
    Console.WriteLine()  
    Console.WriteLine("Validating Child1 after second edit ...")  
    child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, AddressOf XSDErrors)  
    Console.WriteLine("child1 {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

Ten przykład generuje następujące wyniki:This example produces the following output:

Validating doc1 ...  
doc1 validated  
  
Validating Child1 after first edit ...  
child1 validated  
  
Validating Child1 after second edit ...  
The element 'Child1' has invalid child element 'GrandChild3'.  
child1 did not validate  

Uwagi

Za pomocą tej metody można sprawdzić, czy poddrzewo (z XElement elementem głównym) jest zgodne ze schematem.You can use this method to validate that a sub-tree (with an XElement at its root) conforms to a schema. Ta metoda jest używana zazwyczaj, gdy zmodyfikowano poddrzewo i chcesz się upewnić, że nadal jest zgodne ze schematem.You typically use this method when you have modified a sub-tree, and you want to make sure that it still conforms to its schema. Można sprawdzić poprawność całego dokumentu, ale trwa to krótszy czas przetwarzania, aby sprawdzić poprawność tylko poddrzewa.You could validate the entire document, but it takes less processing time to validate a just a sub-tree.

W przypadku przekazania null do validationEventHandlerprogramu ta metoda zgłasza wyjątek po błędach walidacji.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. Ostrzeżenia dotyczące walidacji nie spowodują zgłoszenia wyjątku.Validation warnings will not raise an exception.

Aby sprawdzić poprawność poddrzewa, należy użyć wystąpienia XmlSchemaObject.To validate a sub-tree, you use an instance of XmlSchemaObject. To wystąpienie można uzyskać na różne sposoby.You can obtain this instance in various ways. Oto prosty sposób:An easy way is as follows:

  1. Sprawdź, czy dokument jest zgodny ze schematem.Validate that a document conforms to a schema.

  2. Dodaj wartość sprawdzonych (PSVI) po zakończeniu procesu, wywołując Validate metodę rozszerzenia.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. Wywołaj metodę IXmlSchemaInfo rozszerzającą,abypobraćobiektGetSchemaInfo , który implementuje.Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. Z pobranego obiektu można uzyskać XmlSchemaObject.From the retrieved object, you can get an XmlSchemaObject.

Po wystąpieniu XmlSchemaObjectprogramu można użyć tej metody do zweryfikowania poddrzewa.After you have an instance of an XmlSchemaObject, you can use this method to validate an sub-tree.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

Sprawdza, czy XAttribute zgodne z określoną XmlSchemaObject i XmlSchemaSet, opcjonalnie wypełniają drzewo XML za pomocą sprawdzonych po schemacie walidacji (PSVI).Validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XAttribute ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XAttribute * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

Parametry

source
XAttribute

XAttribute Do walidacji.The XAttribute to validate.

partialValidationType
XmlSchemaObject

XmlSchemaObject Określa poddrzewo do zweryfikowania.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

XmlSchemaSet Aby sprawdzić poprawność.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

A ValidationEventHandler dla zdarzenia, które występuje, gdy czytnik napotyka błędy walidacji.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Jeśli null, zgłasza wyjątek po błędach walidacji.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

Boolean Wskazuje, czy ma zostać wypełniona sprawdzonych weryfikacji (PSVI).A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

Wyjątki

Zgłoszono dla błędów walidacji języka definicji schematu XML (XSD).Thrown for XML Schema Definition Language (XSD) validation errors.

Przykłady

  
                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  
  
static void Main(string[] args)  
{  
    string xsdMarkup =  
        @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:simpleContent>  
          <xsd:extension base='xsd:string'>  
           <xsd:attribute name='Lang' use='required'>  
            <xsd:simpleType>  
             <xsd:restriction base='xsd:token'>  
              <xsd:enumeration value='C#'/>  
              <xsd:enumeration value='VB'/>  
             </xsd:restriction>  
            </xsd:simpleType>  
           </xsd:attribute>  
          </xsd:extension>  
         </xsd:simpleContent>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
  
    XmlSchemaSet schemas = new XmlSchemaSet();  
    schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
    XDocument doc1 = new XDocument(  
        new XElement("Root",  
            new XAttribute("Lang", "C#")  
        )  
    );  
  
    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
  
    Console.WriteLine();  
    Console.WriteLine("Validating Lang attribute ...");  
    XAttribute lang = doc1.Element("Root").Attribute("Lang");  
  
    errors = false;  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
  
    // the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC";  
  
    Console.WriteLine();  
    Console.WriteLine("Validating Lang attribute ...");  
  
    errors = false;  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  
  
                Private Sub DumpInvalidNodes(ByVal el As XElement)  
    If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
        Console.WriteLine("Invalid Element {0}", _  
            el _  
            .AncestorsAndSelf _  
            .InDocumentOrder() _  
            .Aggregate("", _  
                Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))  
    End If  
    For Each att As XAttribute In el.Attributes()  
        If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
            Console.WriteLine("Invalid Attribute {0}", _  
                att _  
                .Parent _  
                .AncestorsAndSelf() _  
                .InDocumentOrder() _  
                .Aggregate("", _  
                    Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _  
                    "/@" + att.Name.ToString())  
        End If  
    Next  
    For Each child As XElement In el.Elements()  
        DumpInvalidNodes(child)  
    Next  
End Sub  
  
Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:simpleContent>  
                        <xsd:extension base='xsd:string'>  
                            <xsd:attribute name='Lang' use='required'>  
                                <xsd:simpleType>  
                                    <xsd:restriction base='xsd:token'>  
                                        <xsd:enumeration value='C#'/>  
                                        <xsd:enumeration value='VB'/>  
                                    </xsd:restriction>  
                                </xsd:simpleType>  
                            </xsd:attribute>  
                        </xsd:extension>  
                    </xsd:simpleContent>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root Lang='C#'/>  
  
    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
    Dim lang As XAttribute = doc1.Element("Root").Attribute("Lang")  
  
    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
  
    ' the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC"  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
  
    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
End Sub  

Ten przykład generuje następujące wyniki:This example produces the following output:

Validating doc1 ...  
doc1 validated  
  
Validating Lang attribute ...  
lang validated  
  
Validating Lang attribute ...  
The 'Lang' attribute is invalid - The value 'VC' is invalid according to its datatype 'Token' - The Enumeration constraint failed.  
lang did not validate  
Invalid Attribute /Root/@Lang  

Uwagi

Tej metody można użyć do sprawdzenia, czy jest XAttribute zgodny ze schematem.You can use this method to validate that an XAttribute conforms to a schema. Ta metoda jest używana zazwyczaj, gdy zmodyfikowano atrybut i chcesz się upewnić, że nadal jest zgodne ze schematem.You typically use this method when you have modified an attribute, and you want to make sure that it still conforms to its schema. Można sprawdzić poprawność całego dokumentu, ale trwa krótszy czas przetwarzania, aby sprawdzić poprawność tylko atrybutu.You could validate the entire document, but it takes less processing time to validate just the attribute.

Jeśli addSchemaInfo jesttrue, ta metoda wypełnia atrybut sprawdzonych po schemacie walidacji (PSVI).If addSchemaInfo is true, this method populates the attribute with the post-schema-validation infoset (PSVI). Po wypełnieniu drzewa XML PSVI można wywołać Extensions.GetSchemaInfo sprawdzony atrybut.After you have populated the XML tree with the PSVI, you can call Extensions.GetSchemaInfo on the validated attribute. Jest to przydatne, jeśli piszesz kod, który opiera się na danych zwracanych GetSchemaInfoprzez.This is useful if you are writing code that relies on data returned by GetSchemaInfo.

W przypadku przekazania null do validationEventHandlerprogramu ta metoda zgłasza wyjątek po błędach walidacji.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. Ostrzeżenia dotyczące walidacji nie spowodują zgłoszenia wyjątku.Validation warnings will not raise an exception.

Aby sprawdzić poprawność atrybutu, należy użyć wystąpienia XmlSchemaObject.To validate an attribute, you use an instance of XmlSchemaObject. To wystąpienie można uzyskać na różne sposoby.You can obtain this instance in various ways. Oto prosty sposób:An easy way is as follows:

  1. Sprawdź, czy dokument jest zgodny ze schematem.Validate that a document conforms to a schema.

  2. Dodaj wartość sprawdzonych (PSVI) po zakończeniu procesu, wywołując Validate metodę rozszerzenia.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. Wywołaj metodę IXmlSchemaInfo rozszerzającą,abypobraćobiektGetSchemaInfo , który implementuje.Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. Z pobranego obiektu można uzyskać XmlSchemaObject.From the retrieved object, you can get an XmlSchemaObject.

Po wystąpieniu XmlSchemaObjectprogramu można użyć tej metody do walidacji atrybutu.After you have an instance of an XmlSchemaObject, you can use this method to validate an attribute.

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

Sprawdza, czy poddrzewo jest XElement zgodne z określoną XmlSchemaObject i XmlSchemaSet, opcjonalnie wypełniając drzewo XML sprawdzonychem po schemacie walidacji (PSVI).Validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XElement ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XElement * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

Parametry

source
XElement

XElement Do walidacji.The XElement to validate.

partialValidationType
XmlSchemaObject

XmlSchemaObject Określa poddrzewo do zweryfikowania.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

XmlSchemaSet Aby sprawdzić poprawność.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

A ValidationEventHandler dla zdarzenia, które występuje, gdy czytnik napotyka błędy walidacji.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Jeśli null, zgłasza wyjątek po błędach walidacji.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

Boolean Wskazuje, czy ma zostać wypełniona sprawdzonych weryfikacji (PSVI).A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

Wyjątki

Zgłoszono dla błędów walidacji języka definicji schematu XML (XSD).Thrown for XML Schema Definition Language (XSD) validation errors.

Przykłady

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:simpleContent>  
             <xsd:extension base='xsd:string'>  
              <xsd:attribute name='Att1' default='Att1 Default Value'/>  
             </xsd:extension>  
            </xsd:simpleContent>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "c1"),  
        new XElement("Child2", "c2")  
    )  
);  
  
XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  
  
Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Contents of doc1:");  
Console.WriteLine(doc1);  
  
Console.WriteLine();  
Console.WriteLine("Contents of doc2:");  
Console.WriteLine(doc2);  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                        <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:simpleContent>  
                                    <xsd:extension base='xsd:string'>  
                                        <xsd:attribute name='Att1' default='Att1 Default Value'/>  
                                    </xsd:extension>  
                                </xsd:simpleContent>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>c1</Child1>  
            <Child2>c2</Child2>  
        </Root>  
  
    Dim doc2 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>content1</Child1>  
            <Child3>content1</Child3>  
        </Root>  
  
    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Contents of doc1:")  
    Console.WriteLine(doc1)  
  
    Console.WriteLine()  
    Console.WriteLine("Contents of doc2:")  
    Console.WriteLine(doc2)  
End Sub  

Ten przykład generuje następujące wyniki: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>  

Uwagi

Za pomocą tej metody można sprawdzić, czy poddrzewo ( XElement w katalogu głównym poddrzewo) jest zgodne ze schematem.You can use this method to validate that a sub-tree (with an XElement at the root of the sub-tree) conforms to a schema. Ta metoda jest używana zazwyczaj, gdy zmodyfikowano poddrzewo i chcesz się upewnić, że nadal jest zgodne ze schematem.You typically use this method when you have modified a sub-tree, and you want to make sure that it still conforms to its schema. Można sprawdzić poprawność całego dokumentu, ale trwa to krótszy czas przetwarzania, aby sprawdzić poprawność tylko poddrzewa.You could validate the entire document, but it takes less processing time to validate a just a sub-tree.

Jeśli addSchemaInfo taktrue, ta metoda wypełnia drzewo XML przy użyciu sprawdzonych po schemacie walidacji (PSVI).If addSchemaInfo is true, then this method populates the XML tree with the post-schema-validation infoset (PSVI).

Istnieją dwa aspekty wypełniania drzewa XML PSVI.There are two aspects of populating the XML tree with the PSVI.

Najpierw adnotacja jest dodawana do wszystkich węzłów w drzewie, w taki sposób, że można GetSchemaInfo teraz wywołać element lub atrybut w drzewie.First, an annotation is added to all nodes in the tree such that you can now call GetSchemaInfo on an element or attribute in the tree.

Drugie, domyślne elementy i atrybuty zdefiniowane w XSD są dodawane do drzewa XML.Second, default elements and attributes defined in the XSD are added to the XML tree. Wywołując jedną z GetSchemaInfo metod, można określić, czy określony element lub atrybut został dodany z pliku XSD jako domyślny element lub atrybut.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.

W przypadku przekazania null do validationEventHandlerprogramu ta metoda zgłasza wyjątek po błędach walidacji.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. Ostrzeżenia dotyczące walidacji nie spowodują zgłoszenia wyjątku.Validation warnings will not raise an exception.

Aby sprawdzić poprawność poddrzewa, należy użyć wystąpienia XmlSchemaObject.To validate a sub-tree, you use an instance of XmlSchemaObject. To wystąpienie można uzyskać na różne sposoby.You can obtain this instance in various ways. Oto prosty sposób:An easy way is as follows:

  1. Sprawdź, czy dokument jest zgodny ze schematem.Validate that a document conforms to a schema.

  2. Dodaj wartość sprawdzonych (PSVI) po zakończeniu procesu, wywołując Validate metodę rozszerzenia.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. Wywołaj metodę IXmlSchemaInfo rozszerzającą,abypobraćobiektGetSchemaInfo , który implementuje.Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. Z pobranego obiektu można uzyskać XmlSchemaObject.From the retrieved object, you can get an XmlSchemaObject.

Po wystąpieniu XmlSchemaObjectprogramu można użyć tej metody do walidacji poddrzewa.After you have an instance of an XmlSchemaObject, you can use this method to validate a sub-tree..

Dotyczy