
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