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

Seleccione idioma Seleccione idioma
Id. de artículo: 318504 - 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 C# .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 C# .NET

  1. Crear una nueva aplicación de consola Visual C# .NET.
  2. Reemplace el código en Class1.cs con el siguiente código:
    using System;
    using System.Xml;
    using System.Xml.Schema;
    
    
    namespace ConsoleApplication3
    {
    	/// <summary>
    	/// Summary description for Class1.
    	/// </summary>
    	class Class1
    	{
    		/// <summary>
    		/// The main entry point for the application.
    		/// </summary>
    		System.Boolean m_success;
    
    		[STAThread]
    		static void Main(string[] args)
    		{
    			// 
    			// TODO: Add code to start application here.
    			// 
    			XmlValidatingReader reader  = null;
               XmlSchemaCollection myschema = new XmlSchemaCollection();
    			ValidationEventHandler eventHandler = new ValidationEventHandler(Class1.ShowCompileErrors );
    
    
    			try
    			{
    				//Create the XML fragment to be parsed.
    				String xmlFrag = "<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.
    				XmlParserContext context = new XmlParserContext(null, null, "", XmlSpace.None);
                  
    				//Implement the reader. 
    				reader = new XmlValidatingReader(xmlFrag, XmlNodeType.Element, context);
    				//Add the schema.
    				myschema.Add("urn:bookstore-schema", "c:\\Books.xsd");
    
    				//Set the schema type and add the schema to the reader.
    				reader.ValidationType = ValidationType.Schema;
    				reader.Schemas.Add(myschema);
    
    				while (reader.Read())
    				{
    				}
                   
    				Console.WriteLine("Completed validating xmlfragment");
    			}
    			catch (XmlException XmlExp)
    			{
    				Console.WriteLine(XmlExp.Message);
    			}
    			catch(XmlSchemaException XmlSchExp)
    			{
    				Console.WriteLine(XmlSchExp.Message);
    			}
    			catch(Exception GenExp)
    			{
    				Console.WriteLine(GenExp.Message);
    			}
    			finally
    			{
    				Console.Read();
    			}
    
    		}
    		public static void ShowCompileErrors(object sender, ValidationEventArgs args)
    		{
    			Console.WriteLine("Validation Error: {0}", args.Message);
    		}
    
    	}
    }
    					
  3. Cuando el mensaje siguiente se muestra en la ventana de resultados, el fragmento de XML es un elemento válido:
    Completed validating xmlfragment
    					
Nota : sólo las declaraciones de tipo y los elementos de nivel superior en el esquema XML se validan con un esquema XML. Subelementos se consideran como locales y, por lo tanto, no pueden validarse. Para validar un subelemento, declarar un elemento de nivel superior y hacer referencia a la.

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, consulte los siguientes sitios Web de MSDN:
Espacio de nombres System.Xml
http://msdn.microsoft.com/en-us/library/system.xml(VS.71).aspx

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

Propiedades

Id. de artículo: 318504 - Última revisión: martes, 16 de septiembre de 2003 - Versión: 3.4
La información de este artículo se refiere a:
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
Palabras clave: 
kbmt kbhowtomaster KB318504 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): 318504

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