Aracılığıyla paylaş


XmlReaderSettings.ValidationFlags Özellik

Tanım

Şema doğrulama ayarlarını gösteren bir değer alır veya ayarlar. Bu ayar şemaları doğrulayan nesneler için XmlReader geçerlidir (ValidationType özelliği olarak ValidationType.Schemaayarlanır).

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

Özellik Değeri

Doğrulama seçeneklerini belirten sabit listesi değerlerinin bit düzeyinde birleşimi. ProcessIdentityConstraints ve AllowXmlAttributes varsayılan olarak etkindir. ProcessInlineSchema, ProcessSchemaLocationve ReportValidationWarnings varsayılan olarak devre dışıdır.

Örnekler

Aşağıdaki örnek, ayarı etkinleştirerek bir XML dosyasını satır içi XML Şemasına ProcessInlineSchema göre doğrular. XML okuyucu, doğrulama uyarılarını görüntüleyecek şekilde yapılandırıldığından, kök öğesinde beklenen uyarıyı da görürsünüz.

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

Örnekte giriş olarak inlineSchema.xml dosyası kullanılır.

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

Çıktı aşağıdaki şekilde olacaktır:

Uyarı: Eşleşen şema bulunamadı. Doğrulama gerçekleşmedi. 'root' öğesinin şema bilgileri bulunamadı.

Doğrulama hatası: 'xsdHeadCount:HeadCount' öğesinde geçersiz 'division' alt öğesi var. 'Id' bekleniyor.

Açıklamalar

Önemli

Bir XmlReaderSettings nesnenin ProcessInlineSchema ve ProcessSchemaLocation doğrulama bayrakları varsayılan olarak ayarlanmaz. Bu bayraklar ayarlandığında, XmlResolver nesnesinin XmlReaderSettings nesnesi içindeki örnek belgesinde XmlReaderkarşılaşılan şema konumlarını çözümlemek için kullanılır. XmlResolver nesnesi ise nullve ProcessSchemaLocation doğrulama bayrakları ayarlanmış olsa ProcessInlineSchema bile şema konumları çözümlenmez.

Doğrulama sırasında eklenen şemalar yeni türler ekler ve doğrulanan belgenin doğrulama sonucunu değiştirebilir. Sonuç olarak, dış şemalar yalnızca güvenilir kaynaklardan çözümlenmelidir.

Belgenin ProcessIdentityConstraints büyük bir bölümü üzerinde kimlik kısıtlamaları olan bir şemada yüksek kullanılabilirlik senaryolarında büyük XML belgeleri doğrulanırken bayrağın devre dışı bırakılması (varsayılan olarak etkindir) önerilir.

Şunlara uygulanır

Ayrıca bkz.