XmlReaderSettings.Schemas 属性

定义

获取或设置在执行架构验证时使用的 XmlSchemaSetGets or sets the XmlSchemaSet to use when performing schema validation.

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

属性值

XmlSchemaSet

当执行架构验证时使用的 XmlSchemaSetThe XmlSchemaSet to use when performing schema validation. 默认为空的 XmlSchemaSet 对象。The default is an empty XmlSchemaSet object.

示例

下面的示例使用 XmlReaderSettings 对象和 XmlReader.Create 方法将架构与 XML 文档关联。The example below uses the XmlReaderSettings object and the XmlReader.Create method to associate a schema with an XML document. 将架构添加到对象的 Schemas 属性 XmlReaderSettingsThe schema is added to the Schemas property of the XmlReaderSettings object. 属性的值 Schemas 是一个 XmlSchemaSet 对象。The value of the Schemas property is an XmlSchemaSet object. 架构用于验证 XML 文档是否符合架构内容模型。The schema is used to validate that the XML document conforms to the schema content model. 架构验证错误和警告由 ValidationEventHandler 对象中定义的进行处理 XmlReaderSettingsSchema validation errors and warnings are handled by the ValidationEventHandler defined in the XmlReaderSettings object.

#using <System.Xml.dll>

using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;

static void booksSettingsValidationEventHandler( Object^ /*sender*/, ValidationEventArgs^ e )
{
   if ( e->Severity == XmlSeverityType::Warning )
   {
      Console::Write( L"WARNING: " );
      Console::WriteLine( e->Message );
   }
   else
   if ( e->Severity == XmlSeverityType::Error )
   {
      Console::Write( L"ERROR: " );
      Console::WriteLine( e->Message );
   }
}

int main()
{
   XmlReaderSettings^ booksSettings = gcnew XmlReaderSettings;
   booksSettings->Schemas->Add( L"http://www.contoso.com/books", L"books.xsd" );
   booksSettings->ValidationType = ValidationType::Schema;
   booksSettings->ValidationEventHandler += gcnew ValidationEventHandler( booksSettingsValidationEventHandler );
   XmlReader^ books = XmlReader::Create( L"books.xml", booksSettings );
   while ( books->Read() )
   {}

   return 0;
}

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

class XmlSchemaSetExample
{
    static void Main()
    {
        XmlReaderSettings booksSettings = new XmlReaderSettings();
        booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd");
        booksSettings.ValidationType = ValidationType.Schema;
        booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);

        XmlReader books = XmlReader.Create("books.xml", booksSettings);

        while (books.Read()) { }
    }

    static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
    {
        if (e.Severity == XmlSeverityType.Warning)
        {
            Console.Write("WARNING: ");
            Console.WriteLine(e.Message);
        }
        else if (e.Severity == XmlSeverityType.Error)
        {
            Console.Write("ERROR: ");
            Console.WriteLine(e.Message);
        }
    }
}
Imports System.Xml
Imports System.Xml.Schema

Class XmlSchemaSetExample

    Shared Sub Main()

        Dim booksSettings As XmlReaderSettings = New XmlReaderSettings()
        booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd")
        booksSettings.ValidationType = ValidationType.Schema
        AddHandler booksSettings.ValidationEventHandler, New ValidationEventHandler(AddressOf booksSettingsValidationEventHandler)

        Dim books As XmlReader = XmlReader.Create("books.xml", booksSettings)

        While books.Read()

        End While

    End Sub

    Shared Sub booksSettingsValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)

        If e.Severity = XmlSeverityType.Warning Then
            Console.Write("WARNING: ")
            Console.WriteLine(e.Message)

        ElseIf e.Severity = XmlSeverityType.Error Then
            Console.Write("ERROR: ")
            Console.WriteLine(e.Message)
        End If

    End Sub

End Class

该示例使用 books.xml 文件作为输入。The example uses the books.xml file as input.

<bookstore xmlns="http://www.contoso.com/books">
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

该示例使用 books.xml 文件作为输入。The example uses the books.xsd file as an input.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:unsignedShort" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

注解

重要

  • 不要使用来自未知或不受信任的源或位置的架构。Do not use schemas from unknown or untrusted sources or locations. 这样做会破坏代码的安全性。Doing so will compromise the security of your code.
  • XML 架构 (包括内联架构) 在本质上容易受到拒绝服务攻击;不要在不受信任的情况下接受它们。XML schemas (including inline schemas) are inherently vulnerable to denial of service attacks; do not accept them in untrusted scenarios.
  • 架构验证错误消息和异常可能会向架构文件公开有关内容模型或 URI 路径的敏感信息。Schema validation error messages and exceptions may expose sensitive information about the content model or URI paths to the schema file. 请注意不要向不受信任的调用方公开此信息。Be careful not to expose this information to untrusted callers.
  • 有关其他信息,请参阅 "安全注意事项" 部分。For additional information, see the "Security considerations" section.

XmlSchemaSet类仅支持 (XSD) 架构的 XML 架构定义语言。The XmlSchemaSet class only supports XML Schema definition language (XSD) schemas. XmlReaderCreate无法将方法创建的实例配置为启用 XML 数据 (XDR) 架构验证。XmlReader instances created by the Create method cannot be configured to enable XML-Data Reduced (XDR) schema validation.

安全注意事项Security considerations

  • 不要使用来自未知或不受信任的源的架构。Do not use schemas from unknown or untrusted sources. 这样做会破坏代码的安全性。Doing so will compromise the security of your code. XmlUrlResolver默认情况下,类用于解析外部架构。The XmlUrlResolver class is used to resolve external schemas by default. 若要对架构的 include、import 和 redefine 元素禁用解析,请将 XmlSchemaSet.XmlResolver 属性设置为 nullTo disable resolution of include, import, and redefine elements of a schema, set the XmlSchemaSet.XmlResolver property to null.

  • 由于使用类而引发的异常 XmlSchemaSet ,例如 XmlSchemaException 类可能包含不应在不受信任的方案中公开的敏感信息。Exceptions raised as a result of using the XmlSchemaSet class, such as the XmlSchemaException class may contain sensitive information that should not be exposed in untrusted scenarios. 例如,的 SourceUri 属性将 XmlSchemaException 返回引发异常的架构文件的 URI 路径。For example, the SourceUri property of an XmlSchemaException returns the URI path to the schema file that caused the exception. SourceUri不应在不受信任的方案中公开属性。The SourceUri property should not be exposed in untrusted scenarios. 应正确处理异常,以便不受信任的情况下不公开此敏感信息。Exceptions should be properly handled so that this sensitive information is not exposed in untrusted scenarios.

适用于

另请参阅