Funcionalidad XMLConvert -> Convertir a un tipo XML válido !!!

Post cruzado de: blog en 3devnet.com

Estos son algunos de los muchos cambios que se dió en Visual Studio .NET 2005 para manejar XML mediante la funcionalidad que engloba el System.Xml. He aquí un apartado que cité donde describen algunas características y diferencias.

"The class “XslTransform” is now obsolete and replaced by the new “XslCompiledTransform”. This new class has some new overloads for the method “Transform” but in general conversion is easy. The method “ToDateTime” from the class “XmlConvert” has a new parameter indicating the serialization mode of the date value. This new parameter is an enum of type “XmlDateTimeSerializationMode” and defines if the DateTime will be serialized using local time, UTC, etc.

The class “XmlSchemaElement” no defines a strong typed “ElementSchemaType” property that replaces the old (no strong typed) “ElementType”. The class “XmlValidatingReader” is not longer supported, so “XmlReader” must be used. The class “XmlReader” now uses a new class of type “XmlReaderSettings” to configure the type of validation to use and schema information to include. This class is passed to the constructor of the new “XmlReader” class."

y aquí un ejemplo que desarrollé para mostrar todo esto. La lectura de nodos de un documento XML retorna un string, esto muchas veces necesita ser convertido a un tipo más específico como un DateTime o Double, entonces para convertir un string a un tipo de dato del .net framework se debe usar los métodos del XmlConvert. Como ya se vió, para la nueva versión 2.0 del .net, las API's Xml han cambiado y ahora son más completas, de esta manera, haremos uso de la enumeración XmlDateTimeSerializationMode para especificar el modo de conversión de datos que se realizará mediante el XmlConvert.

Este será el simple fichero XML que usaremos para la prueba.

Bueno, lo que se intenta hacer es, leer el fichero XML y evaluar el contenido para proceder a convertirlo a tipo .net framework correspondiente, ya sea DateTime o Double, es decir si lo que estamos leyendo es el tag fecha entonces convertiremos su valor que está como string a un tipo DateTime y si es el tag sueldo lo que se lee, entonces convertiremos su valor a un tipo Double. Así de fácil!.

Los espacios de nombres a importar son las siguientes:

using System.IO;
using System.Xml;
Una vez que se ha importado lo necesario explicaré lo que hice:
namespace AppXmlConvert
{
class Program
{

static void Main(string[] args)
{
using (XmlTextReader reader = new XmlTextReader(@"D:\empleados.xml"))
{
using (StringWriter sw = new StringWriter())
{
reader.WhitespaceHandling = WhitespaceHandling.None;
//leemos nodo por nodo...
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{ //buscamos las etiquetas que contienen la información
//que nos interesa capturar para convertirla
if (reader.Name == "fecha")
{
reader.Read();
//el string capturado en la lectura dentro del doc xml
//será convertido a un tipo fecha conservando la
//información zonal.
DateTime dt = XmlConvert.ToDateTime(reader.Value,
XmlDateTimeSerializationMode.RoundtripKind);
TimeSpan ts = DateTime.Now - dt;
Console.WriteLine("Tiempo: {0} meses", ts.Days / 30);
}
else if (reader.Name == "sueldo")
{
reader.Read();
//en esta parte se realiza la conversión a tipo doble.
Double d = XmlConvert.ToDouble(reader.Value);
Console.WriteLine("sueldo + grati: {0} soles",d + 100.34);
}
}

}
//print...
Console.Write(sw.ToString());
}
}
Console.ReadLine();
}
}
}

En la medida posible será necesario hacer las conversiones respectivas cuando se trabaje con información en XML, pues ya sabéis, que esta devuelve strings y por lo tanto es vital saber cuando y cómo deberse usar XmlConvert para llevar acabo la operaciones de negocio de la forma correcta.

Percy Reyes.

Published 6/2/2007 18:42 por Percy Reyes
Comparte este post:
http://geeks.ms/blogs/ozonicco/archive/2007/02/06/funcionalidad-xmlconvert-gt-convertir-a-un-tipo-xml-v-aacute-lido.aspx