25/9/2008 9:57 El Bruno

[VS] Xml –> Xsd –> Clase en C# (para mentes simples como la mia …)

Buenas,

los que me conocen saben que una de mis grandes habilidades es la de no tener memoria, en este sentido soy casi como un cactus (si alguno conoce un cactus con memoria le invito una pizza).

Es por eso que cada tanto posteo cosillas que siempre se me olvidan como por ejemplo esta:

¿Cómo creo una clase que me permita trabajar con un archivo xml a partir del mismo?

Ya sé que es una pregunta un tanto borrica, pero tuve que recurrir a la ayuda de mi amigo Javi (aka PYC), para recordarlo y he aquí los pasos:

1. Tenemos un archivo SampleXml.xml con el siguiente contenido

<?xml version="1.0" encoding="utf-8"?> <Cliente> <Nombre>Jose</Nombre> <EMail>jose@elbruno.com</EMail> <Edad>32</Edad> </Cliente>

2. Para crear un xsd a partir del mismo tenemos 2 opciones, lo editamos en Visual Studio y seleccionamos la opción del menu Xml // Create Schema

 

o desde la linea de comandos utilizamos la herramienta Xsd.

C:\Program Files\Microsoft Visual Studio 9.0\VC>xsd "c:\Temp\samplexml.xml" /out:c:\temp

3. El Xsd resultante es similar al siguiente

<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Cliente"> <xs:complexType> <xs:sequence> <xs:element name="Nombre" type="xs:string" /> <xs:element name="EMail" type="xs:string" /> <xs:element name="Edad" type="xs:unsignedByte" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

4. Para crear luego una clase que nos permita trabajar con el xml inicial, desde la línea de comandos ejecutaremos la siguiente opción

C:\Program Files\Microsoft Visual Studio 9.0\VC>xsd "c:\Temp\samplexml.xsd" /out:c:\temp /classes

Esta opcion “/classes” permite generar clases tanto C# como VB.Net.

5. Finalmente, podemos agregar los archivos generados a un proyecto y trabajar con el mismo utilizando las clases que hemos creado. Por ejemplo:

static void Main(string[] args) { // cargamos un xml a partir de un fichero XmlDocument document = new XmlDocument(); document.Load(@"C:\Temp\SampleXml.xml"); // creamos el objeto correspondiente Cliente cliente = (Cliente)Deserialize(document, typeof(Cliente)); // mostramos parte de la informacion del xml Console.WriteLine("Nombre: {0}", cliente.Nombre); Console.WriteLine("Edad: {0}", cliente.Edad); Console.WriteLine("EMail: {0}", cliente.EMail); Console.ReadKey(); }

Es posible descargar el proyecto de ejemplo desde http://geeks.ms/files/folders/elbruno/entry101271.aspx (gracias Geeks.ms)

 

Saludos @ Here

El Bruno

Crossposting from ElBruno.com
Archivado en:
Comparte este post:

# re: [VS] Xml –> Xsd –> Clase en C# (para mentes simples como la mia …)

Saturday, December 20, 2008 12:52 PM by Zio

Hola.

Gracias por esta pequeña entrada, me ha sido realmente de mucha utilidad. El primer paso (crear el esquema) sabía hacerlo, no así el segundo (crear la clase C#).

Sin embargo tengo una pregunta. Desde luego esto funciona para casos simples, ya que la clase generada basicamente contiene un campo para cada elemento XML, permitiendo simplemente darle valores y leerlos.

Sin embargo, si se crea un esquema algo más complejo, con alguna restricción simple (como por ejemplo limitar el número de caracteres de un elemento mediante xs:maxLength.. o algo parecido), dicha restricción no queda reflejada en la clase C#. La mayoría (por no decir todas) las restricciones que puedan incluirse en un esquema son ignoradas por 'xsd', y sigue creando la misma clase C# simple.

Mi pregunta por tanto es: ¿Conoce alguien alguna manera (otro método, programa...) de crear una clase C# de manera automática a partir de un esquema que represente fidedignamente dicho esquema?

Mucho me temo que tendré que crear un parser de manera manual :(

En cualquier caso gracias por el post, y por la ayuda.

Un saludo!

# re: [VS] Xml –> Xsd –> Clase en C# (para mentes simples como la mia …)

Tuesday, March 03, 2009 2:39 PM by pablo

que bien me vendria eso

# re: [VS] Xml –> Xsd –> Clase en C# (para mentes simples como la mia …)

Tuesday, April 13, 2010 3:39 PM by Javier

Muchas gracias, me ha venido genial el post.

# re: [VS] Xml –> Xsd –> Clase en C# (para mentes simples como la mia …)

Saturday, November 06, 2010 1:09 AM by slalo

podrias poner nuevamente la imagen de la clase en C# no se ve