Cómo: Validar fragmentos XML con un esquema XML en Visual Basic .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 317463 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso describe cómo utilizar objetos XMLSchemaCollection y de XmlValidatingReader para validar un fragmento de lenguaje de marcado extensible (XML) con un esquema XML.

XmlValidatingReader implementa la clase XmlReader y proporciona compatibilidad para la validación de datos XML. La propiedad schemas de XmlValidatingReader conecta el lector a los archivos de esquema almacenados en caché en XmlSchemaCollection . La propiedad ValidationType de XmlValidatingReader especifica el tipo de validación que debe realizar el lector. Si la propiedad se establece en ValidationType.None , crea un lector nonvalidating.

Sólo puede agregar esquemas de lenguaje de definición de esquema XML (XSD) y esquemas de XML simplificado (XDR) a XmlSchemaCollection . Utilice el método Add con un URI de espacio de nombres para cargar los esquemas. Para esquemas XML, el URI de espacio de nombres típica es la propiedad targetNamespace del esquema.

Requisitos

La lista siguiente describe el hardware, el software, la infraestructura y los service pack recomendados que se necesitarán:
  • Microsoft Visual Studio .NET instalado en un sistema operativo compatible con Microsoft Windows
En este artículo se supone que está familiarizado con los temas siguientes:
  • Visual Basic .NET
  • Estándares XML básicos
  • Esquemas XSD

Crear un esquema XSD

Pegue el código siguiente en un nuevo archivo de texto denominado C:\Books.xsd:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:bookstore-schema" elementFormDefault="qualified" targetNamespace="urn:bookstore-schema">
	<xsd:element name="bookstore" type="bookstoreType" />
	<xsd:element name="comment" type="xsd:string" />
	<xsd:element name="author" type="authorName"/>
	<xsd:complexType name="authorName">
		<xsd:sequence>
			<xsd:element name="first-name" type="xsd:string" />
			<xsd:element name="last-name" type="xsd:string" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="bookstoreType">
		<xsd:sequence maxOccurs="unbounded">
			<xsd:element name="book" type="bookType" />
			<xsd:element ref="comment" minOccurs="0" />
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="bookType">
		<xsd:sequence>
			<xsd:element name="title" type="xsd:string" />
			<xsd:element ref="author" />
			<xsd:element name="price" type="xsd:decimal" />
		</xsd:sequence>
		<xsd:attribute name="genre" type="xsd:string" />
	</xsd:complexType>
	
</xsd:schema>
				

Crear una aplicación de Visual Basic .NET

  1. Cree una nueva aplicación de Windows en Visual Basic .NET.
  2. Arrastre Button1 a Form1. Pegue el código siguiente para agregar una variable miembro privada a Class Form1 :
    Dim m_success As Boolean
    					
  3. Pegue el siguiente procedimiento sub para crear un ValidationEventHandler que provoca errores de validación en el objeto XMLValidatingReader :
    Public Sub ValidationEventHandle(ByVal sender As Object, ByVal args As ValidationEventArgs)
            m_success = False
            Console.WriteLine((ControlChars.CrLf & ControlChars.Tab & "Validation error: " & args.Message))
        End Sub 'ValidationEventHandle
    						
    Nota : debe incluir un controlador de eventos para recibir información acerca de errores de validación en la definición de datos de tipo (DTD), el XML simplificado (XDR) esquema y el esquema XML del lenguaje (XSD) de definición de esquema. El controlador de eventos recibe un argumento de tipo ValidationEventArgs que contiene datos relativos a este evento.

    El controlador de devolución de llamada puede utilizar la propiedad ValidationEventArgs.Severity para garantizar que un documento de instancia XML se valida con respecto a un esquema. La propiedad severity permite distinguir entre un error de validación ( gravedad XmlSeverityType.Error ) que indica un error grave y una validación ( gravedad es igual a XmlSeverityType.Warning ) de advertencia que indica que no hay información de esquema está disponible.
  4. Pegue el código siguiente en el procedimiento de evento Button1_Click :
            Dim reader As XmlValidatingReader = Nothing
            Dim myschema As New XmlSchemaCollection()
    
            Try
                'Create the XML fragment to be parsed.
                Dim xmlFrag As String = "<author  xmlns='urn:bookstore-schema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>" & _
                                "<first-name>Herman</first-name>" & _
                               "<last-name>Melville</last-name>" & _
                             "</author>"
    
                'Create the XmlParserContext.
                Dim context As New XmlParserContext(Nothing, Nothing, "", XmlSpace.None)
               
                'Implement the reader. 
                reader = New XmlValidatingReader(xmlFrag, XmlNodeType.Element, context)
                'Add the schema.
                myschema.Add("urn:bookstore-schema", "Books.xsd")
    
                'Set the schema type and add the schema to the reader.
                reader.ValidationType = ValidationType.Schema
                reader.Schemas.Add(myschema)
    
                'Add the handler to raise the validation event.
                AddHandler reader.ValidationEventHandler, AddressOf Me.ValidationEventHandle
    
                While reader.Read
    
                End While
                Console.WriteLine("Completed validating xmlfragment")
    
            Catch XmlExp As XmlException
                Console.WriteLine(XmlExp.Message)
            Catch XmlSchExp As XmlSchemaException
                Console.WriteLine(XmlSchExp.Message)
            Catch GenExp As Exception
                Console.WriteLine(GenExp.Message)
            End Try
        End Sub
    					
  5. Cuando el mensaje siguiente se muestra en la ventana de resultados, el fragmento de XML es un elemento válido:
    Completed validating xmlfragment
    					
Nota : el objeto XMLValidatingReader valida las declaraciones de tipo y los elementos de nivel superior en el esquema XML. Fragmentos de XML, como elementos de sub, se consideran locales. No puede pasar fragmentos de XML a XmlValidatingReader para la validación directa a menos que declare los fragmentos XML como elementos de nivel superior y establezca la referencia en el nivel requerido.

Referencias

Para obtener información adicional, haga clic en los números de artículo correspondientes para verlos en Microsoft Knowledge Base:
307379Cómo: Validar un documento XML utilizando DTD, XDR o XSD en Visual C# .NET
313826INFO: Guía para los esquemas XML en .NET Framework
313651INFORMACIÓN: Guía básica para XML en .NET Framework
Para más información, vea el MSDN siguiente sitios Web:
Espacio de nombres System.Xml
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemxml.asp

Servicios Web XML
http://msdn.microsoft.com/xml

Propiedades

Id. de artículo: 317463 - Última revisión: miércoles, 03 de septiembre de 2003 - Versión: 2.2
La información de este artículo se refiere a:
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Palabras clave: 
kbmt kbhowtomaster KB317463 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 317463

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com