XmlReaderSettings.Schemas Propiedad

Definición

Obtiene o establece el objeto que se va a usar al realizar la XmlSchemaSet validación del esquema.

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

Valor de propiedad

que XmlSchemaSet se va a usar al realizar la validación del esquema. El valor predeterminado es un objeto vacío XmlSchemaSet .

Ejemplos

En el ejemplo siguiente se usa el XmlReaderSettings objeto y el XmlReader.Create método para asociar un esquema a un documento XML. El esquema se agrega a la Schemas propiedad del XmlReaderSettings objeto . El valor de la Schemas propiedad es un XmlSchemaSet objeto . El esquema se usa para validar que el documento XML se ajusta al modelo de contenido del esquema. Los errores y advertencias de validación de esquemas se controlan mediante el ValidationEventHandler definido en el XmlReaderSettings objeto .

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

En el ejemplo se usa el archivo books.xml como entrada.

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

En el ejemplo se usa el archivo books.xsd como entrada.

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

Comentarios

Este artículo pertenece a la propiedad Schemas.

Importante

  • No use esquemas de orígenes o ubicaciones desconocidos o que no sean de confianza. Al hacerlo, se pone en peligro la seguridad del código.
  • Los esquemas XML (incluidos los esquemas insertados) son inherentemente vulnerables a ataques de denegación de servicio; no los acepte en escenarios que no son de confianza.
  • Los mensajes de error y excepciones de validación de esquemas pueden exponer información confidencial sobre el modelo de contenido o las rutas de acceso de URI al archivo de esquema. Tenga cuidado de no exponer esta información a los autores de llamadas que no son de confianza.
  • Para obtener más información, consulte la sección "Consideraciones de seguridad".

La XmlSchemaSet clase solo admite esquemas del lenguaje de definición de esquemas XML (XSD). XmlReader Las instancias creadas por el método Create no se pueden configurar para habilitar la validación de esquemas reducidos XML-Data (XDR).

Consideraciones de seguridad

  • No use esquemas de orígenes desconocidos o que no sean de confianza. Si lo hace, se pondrá en peligro la seguridad del código. La XmlUrlResolver clase se usa para resolver esquemas externos de forma predeterminada. Para deshabilitar la resolución de elementos de inclusión, importación y redefinición de un esquema, establezca la propiedad XmlSchemaSet.XmlResolver en null.

  • Las excepciones generadas como resultado del uso de la XmlSchemaSet clase , como la XmlSchemaException clase , pueden contener información confidencial que no se debe exponer en escenarios que no son de confianza. Por ejemplo, la propiedad SourceUri de un XmlSchemaException devuelve la ruta de acceso del URI al archivo de esquema que provocó la excepción. La propiedad SourceUri no se debe exponer en escenarios que no sean de confianza. Las excepciones deben controlarse correctamente para que esta información confidencial no se exponga en escenarios que no son de confianza.

Se aplica a

Consulte también