Udostępnij za pośrednictwem


XmlReaderSettings.ValidationFlags Właściwość

Definicja

Pobiera lub ustawia wartość wskazującą ustawienia weryfikacji schematu. To ustawienie dotyczy XmlReader obiektów, które weryfikują schematy (ValidationType właściwość ustawiona na ValidationType.Schemawartość ).

public:
 property System::Xml::Schema::XmlSchemaValidationFlags ValidationFlags { System::Xml::Schema::XmlSchemaValidationFlags get(); void set(System::Xml::Schema::XmlSchemaValidationFlags value); };
public System.Xml.Schema.XmlSchemaValidationFlags ValidationFlags { get; set; }
member this.ValidationFlags : System.Xml.Schema.XmlSchemaValidationFlags with get, set
Public Property ValidationFlags As XmlSchemaValidationFlags

Wartość właściwości

Bitowa kombinacja wartości wyliczenia, które określają opcje weryfikacji. ProcessIdentityConstraints i AllowXmlAttributes są domyślnie włączone. ProcessInlineSchema, ProcessSchemaLocationi ReportValidationWarnings są domyślnie wyłączone.

Przykłady

Poniższy przykład weryfikuje plik XML względem wbudowanego schematu ProcessInlineSchema XML, włączając ustawienie. Czytnik XML jest skonfigurowany do wyświetlania ostrzeżeń dotyczących walidacji, dlatego w elemecie głównym jest również wyświetlane oczekiwane ostrzeżenie.

using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;

public class ValidXSD {

  public static void Main() {

    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
    settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
    settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);

    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("inlineSchema.xml", settings);

    // Parse the file.
    while (reader.Read());
  }

  // Display any warnings or errors.
  private static void ValidationCallBack (object sender, ValidationEventArgs args) {
     if (args.Severity==XmlSeverityType.Warning)
       Console.WriteLine("\tWarning: Matching schema not found.  No validation occurred." + args.Message);
     else
        Console.WriteLine("\tValidation error: " + args.Message);
  }
}
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO

public class ValidXSD 

  public shared sub Main() 

    ' Set the validation settings.
    Dim settings as XmlReaderSettings = new XmlReaderSettings()
    settings.ValidationType = ValidationType.Schema
    settings.ValidationFlags = settings.ValidationFlags Or XmlSchemaValidationFlags.ProcessInlineSchema
    settings.ValidationFlags = settings.ValidationFlags Or XmlSchemaValidationFlags.ReportValidationWarnings
      AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack

    ' Create the XmlReader object.
    Dim reader as XmlReader = XmlReader.Create("inlineSchema.xml", settings)

    ' Parse the file. 
    while (reader.Read())
    end while
  end sub

  ' Display any warnings or errors.
  private shared sub ValidationCallBack (sender as object, args as ValidationEventArgs)
     if (args.Severity=XmlSeverityType.Warning)
       Console.WriteLine("   Warning: Matching schema not found.  No validation occurred." + args.Message)
     else
        Console.WriteLine("   Validation error: " + args.Message)
     end if
  end sub 

end class

W przykładzie użyto pliku inlineSchema.xml jako danych wejściowych.

<root>
<!--Start of schema-->
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
            xmlns='xsdHeadCount'
            targetNamespace='xsdHeadCount'>
    <xs:element name='HeadCount'>
        <xs:complexType>
            <xs:sequence>
                <xs:element name='ID' type='xs:unsignedShort' maxOccurs='unbounded' />
            </xs:sequence>
            <xs:attribute name='division' type='xs:string' use='optional' default='QA'/>
        </xs:complexType>
    </xs:element>
</xs:schema>
<!--End of schema-->
<hc:HeadCount xmlns:hc='xsdHeadCount'>
    <ID>12365</ID>
    <ID>43295</ID>
    <division>Accounting</division>
</hc:HeadCount>
</root>

Wynik jest następujący:

Ostrzeżenie: nie można odnaleźć pasującego schematu. Nie nastąpiła walidacja. Nie można odnaleźć informacji o schemacie elementu "root".

Błąd walidacji: element "xsdHeadCount:HeadCount" ma nieprawidłowy element podrzędny "division". Oczekiwany identyfikator.

Uwagi

Ważne

ProcessInlineSchema Flagi XmlReaderSettings sprawdzania poprawności obiektu i ProcessSchemaLocation nie są domyślnie ustawione. Gdy te flagi są ustawione, XmlResolverXmlReaderSettings obiekt jest używany do rozpoznawania lokalizacji schematu napotkanych w dokumencie wystąpienia w pliku XmlReader. XmlResolver Jeśli obiekt to null, lokalizacje schematu nie są rozpoznawane, nawet jeśli ProcessInlineSchema flagi i ProcessSchemaLocation walidacji są ustawione.

Schematy dodane podczas walidacji dodają nowe typy i mogą zmienić wynik weryfikacji dokumentu, który jest weryfikowany. W związku z tym schematy zewnętrzne powinny być rozpoznawane tylko z zaufanych źródeł.

Wyłączenie flagi ProcessIdentityConstraints (domyślnie włączonej) jest zalecane podczas weryfikowania, niezaufanych, dużych dokumentów XML w scenariuszach o wysokiej dostępności względem schematu z ograniczeniami tożsamości w dużej części dokumentu.

Dotyczy

Zobacz też