Ejemplo de lectura de datos con LinQ to XML
Dentro de las nuevas tecnologías aparecidas con el .Net Framework 3.5, LinQ es una de las buenas propuestas para el trabajo tanto con objetos, como con Base de Datos y con XML. Hace poco les comentaba que en el proceso de creación de mi propio blog utilicé LinQ to XML para la extracción de los datos exportados desde WordPress, hasta la base de datos que yo he diseñado. Sobre esa parte, haré el siguiente ejemplo.
Para empezar, se debe tener en cuenta que utilizaré un modelo del archivo de exportación de datos que usa WordPress. Y que mas o menos se ve como en el siguiente gráfico:

Entre las líneas 2 y 7 se definen los namespaces que se utilizarán en las etiquetas del resto del archivo. Un Namespace XML es una colección de nombres, identificados por un URI, que se utiliza para identificar los diferentes elementos y atributos en los documentos XML. Pues bien, el archivo que exporta WordPress contiene 4 namespaces de XML:
- xmlns:content Para el contenido de cada artículo.
- xmlns:wfw Que no sé para que lo utiliza.
- xmlns:dc Para el nombre del autor de cada artículo.
- xmlns:wp Para todo lo demás, bueno, casi todo.
De manera que cuando yo quiera acceder a algún elemento del archivo XML lo debo hacer mediante el namespace y el nombre del elemento (esto no es obligatorio en otros casos, pero en este ejemplo si lo es). Para empezar, como pueden ver en la siguiente imágen, el método que hace todo el trabajo se llama RecuperarArticulos (bien original no?) y devuelve una lista IEnumerable de objetos Articulo (que contiene las propiedades de cada item como: nombre de autor, contenido, fecha de publicacion, etc.) y que recibe como único parámetro la ruta en la que se encuentra el archivo XML.

Ahora, para cargar el documento XML solo debo instanciar un objeto del tipo XDocument (que representa al documento XML) utilizando su método estático Load con la ruta del archivo. Esto cargará el documento XML en memoria y lo tendrá listo para acceder a sus elementos.
A continuación se definen los Namespaces con el objeto XNamespace indicándole el URI correspondiente (estos URI son tomados del archivo de WordPress), en este caso solo utilizaré 3 namespaces de los que nombre arriba ya que uno de ellos no se utiliza en el archivo, al menos no en los que yo obtuve. A continuación viene la parte fácil, recuperar los datos; previamente hay que comentar que yo he creado una clase Categoria que contiene dos propiedades: nombre y url; luego tengo una clase Articulo que entre otras tiene una propiedad Categorias, la cual es una lista IEnumerable de objetos Categoria. A continuación, en la imágen se muestra lo sencillo que puede ser el proceso de recuperación.

Cada articulo esta contenido dentro de una etiqueta “item”, de manera que extraeré los elementos con el método Descendants del objeto XDocument instanciado y le indicaré que por cada elemento se debe crear un nuevo objeto Articulo con la instrucción select new Articulo. Dentro de las llaves se deben colocar las propiedades del objeto Articulo y llenar cada una de ellas utilizando para ello el método Element del objeto item, que como ya comentamos representa a cada elemento “item” del documento XML cargado. Como ya dije, WordPress utiliza Namespaces para la definición de sus elementos, de manera que al cargar un elemento se debe anteponer el objeto XNamespace correspondiente, por ejemplo: Autor = item.Element(dc + “creator”).Value, donde dc es el XNamespace.
Para recuperar la lista de categorias que se encuentra dentro de cada elemento “item” se debe realizar un proceso similar al de la parte inicial haciendo uso de la instrucción from para recuperar nuevamente la lista de elementos. Nótese que esta vez estoy creando una nueva colección de Categorias.
Como se puede observar, este proceso no es nada complicado con LinQ to XML y resulta bastante rápido por cierto, de manera que es una excelente alternativa (al menos hasta aqui) para utilizar en los proyectos.
Les dejo el archivo para descargar incluyendo un archivo llamado Modelo.xml que contiene un ejemplo de archivo descargado de WordPress para que lo puedan probar.
Descargar el ejemplo de LinQ to XML
Básicamente este es el progrma que he diseñado para importar los posts que tengo en este blog hasta mi base de datos, aclaro que en este ejemplo no incluyo los Stored Procedures necesarios para agregarlos a la Base de Datos ni la implementación de los métodos en las clases correspondientes ni las clases ya que, esos son otros temas que no forman parte de este ejemplo, sin embargo, cuando todo este proceso llegue a su fin, dejaré todo el código a libre disposición.
Espero que les sea de utilidad.
Saludos.

y TAMBIEN HAY TRABAJO EN ESTO Y PAGAN BIEN POR QUE LA VERDAD ME GUSTA LA INFORMASTICA Y TO LO QUE SE REALACIONE A LA COMPUTACION
Hola , deseo meter una consulta de linq en un archivo xml , todo de una.
Podria ayudarme?
wilfolightfire18@hotmail.com
Me ha servido mucho su ejemplo pero tengo un problema parecido pero diferente, mi XML tiene un nivel más complejo que el suyo, es decir, tiene una categoría que puene contener 1 o más aplicaciones y cada una de ellas igual, y otro nodo llamado que puede tener una o más de 4 tipos únicamente… Podría ayudarme con las consultas en LinQ para pasar a las clases????