<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>h@nz ...el Geek &#187; LinQ to XML</title>
	<atom:link href="http://hanzcocchi.net/category/linq-to-xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://hanzcocchi.net</link>
	<description>.Net, Internet, Tecnología, algo personal.</description>
	<lastBuildDate>Wed, 23 Mar 2011 15:02:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>LinQ para Oracle, para MySQL y para SharePoint</title>
		<link>http://hanzcocchi.net/linq-para-oracle-para-mysql-y-para-sharepoint/</link>
		<comments>http://hanzcocchi.net/linq-para-oracle-para-mysql-y-para-sharepoint/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 23:31:43 +0000</pubDate>
		<dc:creator>h@nz</dc:creator>
				<category><![CDATA[.Net FrameWork 3.5]]></category>
		<category><![CDATA[LinQ to SQL]]></category>
		<category><![CDATA[LinQ to XML]]></category>

		<guid isPermaLink="false">http://hanzcocchi.net/?p=688</guid>
		<description><![CDATA[A veces me pongo a pensar que el día tiene muy pocas horas, y que tenemos tan poco tiempo para disponer y tantas cosas que aprender durante el transcurso de nuestras vidas que pues&#8230;. después de un rato entiendes que solo nos queda avanzar como la tortuga: &#8220;lento pero seguro&#8221;. LinQ, una de las mas [...]]]></description>
			<content:encoded><![CDATA[<p>A veces me pongo a pensar que el día tiene muy pocas horas, y que tenemos tan poco tiempo para disponer y tantas cosas que aprender durante el transcurso de nuestras vidas que pues&#8230;. después de un rato entiendes que solo nos queda avanzar como la tortuga: &#8220;lento pero seguro&#8221;.</p>
<p><a href="http://msdn.microsoft.com/es-es/library/bb397926.aspx">LinQ</a>, una de las mas recientes tecnologías que <a href="http://www.microsoft.com">Microsoft</a> ha puesto a disposición de los desarrolladores tiene avances bastantes significativos, y es que además de los ya conocidos:</p>
<ul>
<li><a href="http://msdn.microsoft.com/es-es/library/bb397919.aspx">LinQ to Objects</a></li>
<li><a href="http://msdn.microsoft.com/es-es/library/bb397942.aspx">LinQ to ADO .Net</a>
<ul>
<li><a href="http://msdn.microsoft.com/es-es/library/bb386977.aspx">LinQ to DataSet</a></li>
<li><a href="http://msdn.microsoft.com/es-es/library/bb386976.aspx">LinQ to SQL</a></li>
<li><a href="http://msdn.microsoft.com/es-es/library/bb386964.aspx">LinQ to Entities</a></li>
</ul>
</li>
<li><a href="http://msdn.microsoft.com/es-es/library/bb387098.aspx">LinQ to XML</a></li>
</ul>
<p>Ahora se suman a esta familia, <span id="more-688"></span>los nuevos:</p>
<ul>
<li><a href="http://www.download3k.com/Press-LINQ-to-MySQL-and-LINQ-to-Oracle-Support.html">LinQ to Oracle</a></li>
<li><a href="http://www.download3k.com/Press-LINQ-to-MySQL-and-LINQ-to-Oracle-Support.html">LinQ to MySQL</a></li>
<li><a href="http://geeks.ms/blogs/ciin/archive/2008/10/10/linq-to-sharepoint-o-linq4sp-disponible-la-rc1.aspx">LinQ to Sharepoint</a></li>
</ul>
<p><img src="http://farm3.static.flickr.com/2101/2038977431_7072df3bea_m.jpg" alt="Sheldon, el sabelotodos de &quot;The Big Bang Theory&quot;" width="160" height="240" align="right" /><strong>Que significa esto?</strong> pues simplemente significa que LinQ (como tecnología de acceso a datos para integrar el lenguaje de programación de la aplicación con el lenguaje de programación de la Base de datos) ha tenido la aceptación necesaria como para ir consolidándose entre los desarrolladores.</p>
<p>Y claro, nunca faltan las aplicaciones que uno desarrolla pero que por ejemplo requiere obtener datos desde una fuente de datos diferente, desde una Base de Datos MySQL por ejemplo; entonces si tengo un proyecto hecho con el <a href="http://msdn.microsoft.com/es-es/library/w0x726c2.aspx">.Net Framework 3.5</a> y <em><strong>LinQ</strong></em> y ya estoy con toda la emoción encima y luego debo dejar de usar LinQ para poder extraer los datos&#8230; pues como que no nos cae bien el escenario no?</p>
<p>Y yo me pregunto, en que momento de mi muy humilde vida desarrollando Software &#8220;jugaré&#8221; con esto? Pues calma, paciencia y buen humor&#8230; no existe persona que lo sepa todo, a menos que seas <em><strong>Sheldon</strong></em>.</p>
<p>Saludos.</p>
<p><strong>Fuente:</strong> <a href="http://geeks.ms/blogs/ciin/default.aspx">Blog del CIIN</a> &#8211; <a href="http://geeks.ms/blogs/ciin/archive/2008/10/04/linq-to-oracle-y-linq-to-mysql.aspx">LinQ to Oracle y LinQ to MySQL</a> &#8211; <a href="http://geeks.ms/blogs/ciin/archive/2008/10/10/linq-to-sharepoint-o-linq4sp-disponible-la-rc1.aspx">LinQ to Sharepoint o LINQ4SP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hanzcocchi.net/linq-para-oracle-para-mysql-y-para-sharepoint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejemplo de lectura de datos con LinQ to XML</title>
		<link>http://hanzcocchi.net/ejemplo-de-lectura-de-datos-xml-con-linq-to-xml/</link>
		<comments>http://hanzcocchi.net/ejemplo-de-lectura-de-datos-xml-con-linq-to-xml/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 21:09:50 +0000</pubDate>
		<dc:creator>h@nz</dc:creator>
				<category><![CDATA[.Net FrameWork 3.5]]></category>
		<category><![CDATA[LinQ to XML]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://hanzcocchi.net/?p=648</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Dentro de las nuevas tecnologías aparecidas con el <a href="http://msdn.microsoft.com/es-es/library/aa139616.aspx">.Net Framework 3.5</a>, <a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx">LinQ</a> es una de las buenas propuestas para el trabajo tanto con objetos, como con Base de Datos y con <a href="http://es.wikipedia.org/wiki/XML">XML</a>. <a href="http://hanzcocchi.net/creando-un-blog-v/">Hace poco les comentaba que en el proceso de creación de mi propio blog</a> utilicé <a href="http://msdn.microsoft.com/es-es/library/system.xml.linq.aspx">LinQ to XML</a> para la extracción de los datos exportados desde <a href="http://www.wordpress.org">WordPress</a>, hasta la base de datos que yo he diseñado. Sobre esa parte, haré el siguiente ejemplo.</p>
<p>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:</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-649" title="Ejemplo Archivo XML exportado de WordPress" src="http://hanzcocchi.net/wp-content/uploads/ejemploarchivoxml.png" alt="Ejemplo Archivo XML exportado de WordPress" width="499" height="606" /></p>
<p><span id="more-648"></span>Entre las líneas 2 y 7 se definen los namespaces que se utilizarán en las etiquetas del resto del archivo. Un <em>Namespace XML</em> es una colección de nombres, identificados por un <a href="http://es.wikipedia.org/wiki/Uniform_Resource_Identifier">URI</a>, 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:</p>
<ul>
<li><em><strong>xmlns:content</strong></em> Para el contenido de cada artículo.</li>
<li><em><strong>xmlns:wfw</strong></em> Que no sé para que lo utiliza.</li>
<li><em><strong>xmlns:dc</strong></em> Para el nombre del autor de cada artículo.</li>
<li><em><strong>xmlns:wp</strong></em> Para todo lo demás, bueno, casi todo.</li>
</ul>
<p>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 <strong>RecuperarArticulos</strong> (bien original no?) y devuelve una lista <span style="color: #59c8c4;">IEnumerable</span> de objetos <strong>Articulo</strong> (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.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-650" title="Declaración de los Namespaces XML en C#" src="http://hanzcocchi.net/wp-content/uploads/namespaces.png" alt="Declaración de los Namespaces XML en C#" width="500" height="125" /></p>
<p>Ahora, para cargar el documento XML solo debo instanciar un objeto del tipo <a href="http://msdn.microsoft.com/es-es/library/system.xml.linq.xdocument.aspx">XDocument</a> (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.</p>
<p>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 <strong>Categoria</strong> que contiene dos propiedades: nombre y url; luego tengo una clase <strong>Articulo</strong> que entre otras tiene una propiedad <em>Categorias</em>, la cual es una lista <span style="color: #59c8c4;">IEnumerable</span> de objetos <em>Categoria</em>. A continuación, en la imágen se muestra lo sencillo que puede ser el proceso de recuperación.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-651" title="Recuperar los elementos XML desde el archivo" src="http://hanzcocchi.net/wp-content/uploads/recuperandoelementosxml.png" alt="Recuperar los elementos XML desde el archivo" width="500" height="186" /></p>
<p>Cada articulo esta contenido dentro de una etiqueta <strong>&#8220;item&#8221;</strong>, de manera que extraeré los elementos con el método <a href="http://msdn.microsoft.com/es-es/library/system.xml.linq.xdocument.descendants.aspx">Descendants</a> del objeto <a href="http://msdn.microsoft.com/es-es/library/system.xml.linq.xdocument.aspx">XDocument</a> instanciado y le indicaré que por cada elemento se debe crear un nuevo objeto <strong>Articulo</strong> con la instrucción <strong><span style="color: #0000ff;">select new</span> <span style="color: #33cccc;">Articulo</span></strong>. Dentro de las llaves se deben colocar las propiedades del objeto <strong>Articulo</strong> y llenar cada una de ellas utilizando para ello el método <a href="http://msdn.microsoft.com/es-es/library/system.xml.linq.xcontainer.element.aspx">Element</a> del objeto item, que como ya comentamos representa a cada elemento &#8220;item&#8221; 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 <a href="http://msdn.microsoft.com/es-es/library/system.xml.linq.xnamespace.aspx">XNamespace</a> correspondiente, por ejemplo: <strong>Autor = item.Element(dc + <span style="color: #993300;">&#8220;creator&#8221;</span>).Value</strong>, donde dc es el XNamespace.</p>
<p>Para recuperar la lista de categorias que se encuentra dentro de cada elemento &#8220;item&#8221; se debe realizar un proceso similar al de la parte inicial haciendo uso de la instrucción <span style="color: #0000ff;">from</span> para recuperar nuevamente la lista de elementos. Nótese que esta vez estoy creando una nueva colección de Categorias.</p>
<p>Como se puede observar, este proceso no es nada complicado con <strong>LinQ to XML</strong> y resulta bastante rápido por cierto, de manera que es una excelente alternativa (al menos hasta aqui) para utilizar en los proyectos.</p>
<p>Les dejo el archivo para descargar incluyendo un archivo llamado <strong>Modelo.xml</strong> que contiene un ejemplo de archivo descargado de WordPress para que lo puedan probar.</p>
<p style="text-align: right;"><a href="http://cid-74bbd3caaf789965.skydrive.live.com/self.aspx/Public/EjemploLinQtoXML.zip"><strong>Descargar el ejemplo de LinQ to XML</strong></a></p>
<p>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.</p>
<p>Espero que les sea de utilidad.</p>
<p>Saludos.</p>
]]></content:encoded>
			<wfw:commentRss>http://hanzcocchi.net/ejemplo-de-lectura-de-datos-xml-con-linq-to-xml/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

