Поделиться через


XmlReaderSettings.ValidationFlags Свойство

Определение

Возвращает или задает значение, указывающее параметры проверки схемы. Этот параметр применим к объектам XmlReader, служащим для проверки схем (значение свойства ValidationType равно ValidationType.Schema).

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

Значение свойства

Побитовое сочетание значений перечисления, определяющих параметры проверки. Поля ProcessIdentityConstraints и AllowXmlAttributes по умолчанию включены. ProcessInlineSchema, ProcessSchemaLocation и ReportValidationWarnings по умолчанию отключены.

Примеры

В следующем примере XML-файл проверяется на соответствие встроенной схеме XML путем включения ProcessInlineSchema параметра . Средство чтения XML настроено для отображения предупреждений проверки, поэтому вы также увидите ожидаемое предупреждение в корневом элементе.

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

В этом примере в качестве входных данных используется файл inlineSchema.xml.

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

Вывод выглядит следующим образом.

Предупреждение. Сопоставимая схема не найдена. Проверка не выполнялась. Не удалось найти сведения о схеме для элемента 'root'.

Ошибка проверки. Элемент xsdHeadCount:HeadCount имеет недопустимый дочерний элемент division. Ожидается ID.

Комментарии

Важно!

Флаги проверки ProcessInlineSchema и ProcessSchemaLocation объекта XmlReaderSettings по умолчанию не установлены. Если эти флаги установлены, для разрешения расположения схем, обнаруженных в экземпляре документа в объекте XmlResolver, используется арбитр XmlReaderSettings объекта XmlReader. XmlResolver Если объект имеет значение null, расположения схемы не разрешаются, даже если ProcessInlineSchema установлены флаги проверки и ProcessSchemaLocation .

Схемы, добавленные во время проверки, добавляют новые типы и могут изменить результат проверки документа. Поэтому следует разрешать только внешние схемы из доверенных источников.

Отключение флага ProcessIdentityConstraints (включенного по умолчанию) рекомендуется при проверке ненадежных больших XML-документов в сценариях с высоким уровнем доступности по схеме с ограничениями идентификации в значительной части документа.

Применяется к

См. также раздел