lunes 29 de junio de 2009

Leer un nodo XML con Xpath

El mundo de .NET es simplemente inabarcable. Pero hace unos meses me encontré delante de la pantalla de un ordenador intentando superar una prueba que se trataba justamente de lo que se trata en este post.
Es decir leer el atributo de un nodo específico de un fichero xml. Tengo un xml tal cual:

<Configuracion>
  <PresentacionDatosEspecificos>
    <PresentacionWeb cifEmisor="CIF del emisor UNO" />
    <PresentacionWeb cifEmisor="CIF del emisor DOS" />
  </PresentacionDatosEspecificos>
</Configuracion>

Y quiero leer el atributo “cifEmisor” de los nodos PresentacionWeb.

Mi primer camino, y el que mi experiencia me indicó como el más rápido, es usar el metodo readXML de un dataset. Esta función devuelve una tabla con los nodos PresentacionWeb, con los cuales puedo hacer lo que quiera. Muy interesante si se va a visualizar en un GridView.

public DataTable lectorXMLDataSet(string file_path)
{
    DataSet ds = new DataSet();
    ds.ReadXml(file_path);
    return ds.Tables["PresentacionWeb"];
}

Pero, para no cargar todo todo el xml en memoria, puedo utilizar XPath. Que es mucho más rápido en la lectura, me permite acceso aleatorio a los nodos de un xml y realizar búsquedas por patrones complejos.

public void lectorXMLPath(string file_path)
{
    XPathDocument doc = new XPathDocument(file_path);
    XPathNavigator nav = doc.CreateNavigator();

    Response.Write("Listado de nodos <br/>");
    foreach (XPathNavigator node in nav.Select("//PresentacionWeb"))
        Response.Write (node.GetAttribute("cifEmisor",string.Empty) + "<br/>");
}


Algún día probare LinqToXML y os contaré qué tal va… :)

Recuperar tabla de un dataset en C#

Uno que viene de Visual Basic se encuentra con pequeñas diferencias de sintaxis en C# que hay que reconocer que “tocan la moral”. Por ejemplo el cómo extraer una tabla de un dataset.

En VB es sencillo:
Imports System.Data

Dim ds as New DataSet -- (debo cargar el dataSet con datos)
Dim tabla as new DataTable
tabla = ds.Table(“<nombre de la tabla”>)

Y en C# es igual de sencillo (bueno realmente más) peeeero:
using System.Data;

DataSet ds = new DataSet();
DataTable tabla = new DataTable();
tabla = ds.Tables["<nombre de la tabla>"];

Dita sea, el tiempo que perdí hasta que me di cuenta que hay que cambiar los paréntesis por corchetes :D

domingo 28 de junio de 2009

Bruno y su robotijo. MADNug

Este jueves pasado, por fin saqué tiempo para acercarme a las oficinas de Microsoft para disfrutar de una presentación realizada por Bruno sobre Microsoft Robotics. Y poder conocer de primera mano el famoso “Robotijo” que lleva paseando por, literalmente, medio mundo.

He de reconocer que mi “ego” se sintió un poquito más grande al reconocerme este distinguido caballero. Y es que ya son más de una y de dos reuniones a la que asisto como oyente.

La charla estuvo bien. Me aclaró el alcance de las posibilidades con este “juguetito” y me quito de la mente el dedicarme a programar estaciones espaciales automáticas con este software. El robotijo es la cosa más fea del mundo –pero no tanto como la aspiradora- pero con un increíble feeling a “number 5” y con el mismo buen rollito.

25062009359 
El robotijo siguiendo la línea negra…

Es de señalar que le acababa de llegar LA MAQUINA a Bruno (un bicharraco con un micro de 64bits y 8Gb de RAM) y la charla fue un verdadero compendio de la ley de Murphy y el efecto “presentación”. Vamos, todo lo que pudo ir mal lo fue. Y algo más. Pero Bruno, con su increíble capacidad de comunicación, sobrellevo la presentación y nos mantuvo atentos durante las dos horas que duró.

De lo mejor, los vídeos del “perseguidor de gatos negros”, el VPL (Visual Programming Language” y – con mucho – los movimientos del robotijo. Que aún haciendo nada, nos tenía embobados a los frikis de la electrónica que estábamos presentes y que lo mirábamos como si fuera magia.

25062009358 “la diferencia entre los niños y los adultos es el precio de los juguetes.”

P.D. Que gusto/interesante la charla antes de la presentación sobre metodologías y procesos de desarrollo.

miércoles 24 de junio de 2009

Visual Studio con Subversion

Mi compañía utiliza el SubVersion como repositorio de datos. Y es la primera vez que lo utilizo de forma intensiva como ya he utilizado con anterioridad el SourceSafe o el Team Foundation Server.

Asique, ni corto ni perezoso, me bajo el plugin para el Visual Studio AnkhSVN y a ver qué me encuentro.

Primera instalación correcta, abro un VS2005 que tengo y… fallo. No veo el conector al subversión. Una vez más el dicho de “Plimelo jodel apalato DESPUES leel instlucciones” vuelve a cobrar protagonismo y me toca leerme el faq a ver qué estoy haciendo mal.

Vale, reinicio el VS2005 (:)) y tengo una nueva opción en el menú de “File”.  Subversion Project.

Y también en el menú “View” tengo varias nuevas opciones que veremos después de cargar el proyecto.

image

Bueno, todo parece que funciona correctamente. He subido al repositorio Subversion -con el Tortoise-, el código de la aplicación y me la estoy bajando igual que si fuera un SourceSafe. Accediendo a la carpeta local y diciéndole que haga un SVN Update.

image

Si el proyecto que estás cargando viene de estar en el sourceSafe, es buena idea eliminar todos los ficheros *scc. Y después en el Visual Studio quitarle a la solución el repositorio de datos y que tome el control el Subversion.

Por último, nos  vamos a nuestra solución, la abrimos y vemos los cambios en las vistas. Aparecen nuevas entradas en el menú de los ficheros en la vista  del explorador de la solución.

image

En la vista de cambios pendientes.

image

Una nueva vista de explorador del repositorio… mola!!

image

Y una cosa que echaba de menos mucho… un explorador de la solución en su carpeta en local!!

image

Por ahora me gusta mucho más que el SourceSafe y ya veremos que tal se comporta en comparación con el Team Foundation Server.

Quitar Proyectos Recientes del Visual Studio

Es un auténtico fastidio los proyectos que se mantienen eternamente en la ventana de inicio del Visual Studio y que no utilizas para nada.

Gracias a San Google he encontrado esta solución que es muy sencillita.

Muchas gracias a Jorgelig y su Blog… :)

jueves 11 de junio de 2009

No me olvidado...

No me he olvidado, se me agolpan tantas cosas, buenas algunas malas muchas, en la mente por el "pollo" que tengo montado en mi empresa que llevo meses sin escribir.

Mientras estoy aprendiendo C#.

En cuanto entregue los dos proyectos que tengo entre manos volveré a escribir, que están siendo un auténtico suplicio.

domingo 10 de mayo de 2009

Ajuste de línea en un control tipo label

Esto de ser jefe de Proyecto puro, es decir sin picar ni una línea de código y en una tecnología absolutamente desconocida, me ha echo alejarme un poquito del desarrollo.

Pero como esto de programar es veneno puro, me estoy haciendo una pequeña aplicación privada y me encontré que si escribía anotaciones en el FKEditor, después en un control label me podía encontrar que una frase demasiado larga me reventará la página en donde se visualizaba.

Asín que me di un par de vueltas y me encontré con una clave css made in microsoft que ha sido adoptada en la futura CSS 3.0 y que es:

word-wrap: break-word;

Con esta definición se consigue que el navegador evite que una línea demasiado grande no te reviente el diseño gráfico o, aún peor, se lo salte a la torera.

Lo curioso.
Que el IE lo soporte es lógico. Que Firefox no lo soporte, también es lógico porque sigue el CSS 2.x. Pero la agradable sorpresa ha sido que Safari y Chrome lo soportan perfectamente.

Osea, un punto negativo a Firefox (además de su inexplicable avidez de memoria).

Artículo fuente.