<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUcBQ3s-fCp7ImA9WhRRFE4.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417</id><updated>2011-11-27T15:37:32.554-08:00</updated><title>Solo .Net</title><subtitle type="html">Blog de todo lo referente a .Net Framework.
Visitanos y descubre con nosotros los secretos de este framework de programación.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.solonetframework.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.solonetframework.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Solonet" /><feedburner:info uri="solonet" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DU8CQ3oyfip7ImA9WhZUFEo.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-2555564199765468837</id><published>2011-05-31T14:47:00.000-07:00</published><updated>2011-06-07T13:17:42.496-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-07T13:17:42.496-07:00</app:edited><title>Nunit - modelo basado en restricciones (constraint)</title><content type="html">Desde la &lt;b&gt;versión 2.4&lt;/b&gt; de &lt;b&gt;Nunit&lt;/b&gt; se tiene una nueva sintaxis llamada &lt;b&gt;constraint-model&lt;/b&gt;, que tiene como mayor ventaja una claridad mayor en la lectura del código (por supuesto esto mas cierto si hablas ingles).&lt;br /&gt;
Esta nueva sintaxis es tan fácil de usar como la anterior basada en afirmaciones (&lt;b&gt;assert&lt;/b&gt;) y supuestamente es más poderosa, aunque según los autores de &lt;b&gt;Nunit&lt;/b&gt; no se recomienda la una o la otra preferentemente, en realidad es más cuestión de gusto, aunque puede ser preferible el uso de la nueva sintaxis al usar junto con otros frameworks,&lt;br /&gt;
En fin les dejo un ejemplo básico del tema:&lt;br /&gt;
&lt;br /&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[TestFixture]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UserTestConstraint {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    [Test]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ConstructorTest() {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        User user = &lt;span class="kwrd"&gt;new&lt;/span&gt; User(&lt;span class="str"&gt;"Pedro"&lt;/span&gt;, &lt;span class="str"&gt;"secreto"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        Assert.That(user.Name, Is.EqualTo(&lt;span class="str"&gt;"Pedro"&lt;/span&gt;));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        Assert.That(user.Password, Is.EqualTo(&lt;span class="str"&gt;"secreto"&lt;/span&gt;));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        Assert.That(user.Password, Is.Not.EqualTo(&lt;span class="str"&gt;"secreto1"&lt;/span&gt;));&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Para aprender más acerca de las &lt;b&gt;pruebas unitarias con .Net Framework&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-pruebas.html"&gt;Lista de artículos acerca de pruebas unitarias con .Net Framework&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-2555564199765468837?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vSHRRVm2OTKfVQnw4dVdQheurw0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vSHRRVm2OTKfVQnw4dVdQheurw0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vSHRRVm2OTKfVQnw4dVdQheurw0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vSHRRVm2OTKfVQnw4dVdQheurw0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/L4zm54FeVhc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/2555564199765468837/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/05/nunit-modelo-basado-en-restricciones.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/2555564199765468837?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/2555564199765468837?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/L4zm54FeVhc/nunit-modelo-basado-en-restricciones.html" title="Nunit - modelo basado en restricciones (constraint)" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/05/nunit-modelo-basado-en-restricciones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNSHYzcSp7ImA9WhZVFkQ.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-728364788394308739</id><published>2011-05-23T11:03:00.000-07:00</published><updated>2011-05-29T12:28:19.889-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-29T12:28:19.889-07:00</app:edited><title>Tips y errores del control WebBrowser (Windows.Forms)</title><content type="html">Te manda una excepción &lt;b&gt;FileNotFoundException&lt;/b&gt; al usar la propiedad &lt;b&gt;DocumentText&lt;/b&gt;, y estas seguro de que el documento ya se termino de cargar correctamente.&lt;br /&gt;
&lt;br /&gt;
Este es un bug del control &lt;b&gt;WebBrowser&lt;/b&gt; y al parecer &lt;b&gt;Microsoft&lt;/b&gt; no tiene pensado arreglarlo, afortunadamente hay otras formas de obtener el código fuente de la pagina sin tener este error para ello debes usar la propiedad &lt;b&gt;DomDocument&lt;/b&gt; del &lt;b&gt;WebBrowser&lt;/b&gt; y convertirla a la clase &lt;b&gt;HTMLDocument&lt;/b&gt; incluida en el ensamblado &lt;b&gt;mshtml&lt;/b&gt; por lo que debes agregar a tu proyecto una referencia a ese ensamblado, con este objeto podemos usar la propiedad &lt;b&gt;documentElement&lt;/b&gt; e &lt;b&gt;innerHTML&lt;/b&gt;, en ella tenemos el código que buscamos.&lt;br /&gt;
para mayor claridad aquí esta el ejemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; content = ((mshtml.HTMLDocument)browser.Document.DomDocument).documentElement.innerHTML;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-728364788394308739?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vIUNajwAtioGZyS8vvvWs3gcUcc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vIUNajwAtioGZyS8vvvWs3gcUcc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vIUNajwAtioGZyS8vvvWs3gcUcc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vIUNajwAtioGZyS8vvvWs3gcUcc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/ZyUNvxf18Ic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/728364788394308739/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/05/tips-y-errores-del-control-webbrowser.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/728364788394308739?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/728364788394308739?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/ZyUNvxf18Ic/tips-y-errores-del-control-webbrowser.html" title="Tips y errores del control WebBrowser (Windows.Forms)" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/05/tips-y-errores-del-control-webbrowser.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4FQn44fyp7ImA9WhZWFUo.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-2006074837435732314</id><published>2011-05-16T11:34:00.000-07:00</published><updated>2011-05-16T11:35:13.037-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-16T11:35:13.037-07:00</app:edited><title>Métodos de extensión</title><content type="html">Los &lt;b&gt;métodos de extensión&lt;/b&gt; son una forma muy sencilla y conveniente de agregar funcionalidad a código existente en &lt;b&gt;.Net Framework&lt;/b&gt; se usan básicamente cuando necesitamos agregar funcionalidad a un código que no podemos cambiar, son muy usados en la librería de clases base, donde se utilizan por ejemplo para implementar Linq.&lt;br /&gt;
La forma de crear un método de extensión es crear una clase estática en la cual los métodos de extensión tienen como característica que el primer argumento de la función esta precedido por el modificador &lt;b&gt;this&lt;/b&gt; y este parámetro es el que indica el tipo de datos que extiende el método.&lt;br /&gt;
Por ejemplo para extender el tipo &lt;b&gt;string[]&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; StringExtension {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; PrintAll(&lt;span class="kwrd"&gt;this&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] strings) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; i &lt;span class="kwrd"&gt;in&lt;/span&gt; strings) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            Console.WriteLine(i);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;Y podemos usar el método como si estuviera incluido en el tipo &lt;b&gt;string[]&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt;[] strings = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] { &lt;span class="str"&gt;"hola"&lt;/span&gt;, &lt;span class="str"&gt;"mundo"&lt;/span&gt;, &lt;span class="str"&gt;"con"&lt;/span&gt;, &lt;span class="str"&gt;"extensiones"&lt;/span&gt;};&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    strings.PrintAll();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    Console.ReadLine();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Cabe mencionar que no esta recomendado usar mucho los &lt;b&gt;métodos de extensión,&lt;/b&gt; si es posible añadir los métodos en la clase que los necesita es mejor incluirlos directamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-2006074837435732314?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dnDYtlD9CpdiGcQ7xLWU0z_Cu-E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dnDYtlD9CpdiGcQ7xLWU0z_Cu-E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dnDYtlD9CpdiGcQ7xLWU0z_Cu-E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dnDYtlD9CpdiGcQ7xLWU0z_Cu-E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/R7nSU3NTFg4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/2006074837435732314/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/05/metodos-de-extension.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/2006074837435732314?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/2006074837435732314?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/R7nSU3NTFg4/metodos-de-extension.html" title="Métodos de extensión" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/05/metodos-de-extension.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQESXc6fip7ImA9WhZXGUs.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-6329038757500700162</id><published>2011-05-09T11:04:00.000-07:00</published><updated>2011-05-09T11:05:08.916-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-09T11:05:08.916-07:00</app:edited><title>Usando XPath en .Net Framework</title><content type="html">&lt;b&gt;XPath&lt;/b&gt; es una tecnología que nos permite encontrar información en un documento &lt;b&gt;XML&lt;/b&gt;, &lt;b&gt;.Net Framework&lt;/b&gt; tiene integrada un &lt;b&gt;API&lt;/b&gt; muy sencilla de usar que nos permite usar &lt;b&gt;XPath&lt;/b&gt; en nuestras aplicaciones.&lt;br /&gt;
Aquí les muestro un ejemplo sencillo del uso de esta &lt;b&gt;API&lt;/b&gt;.&lt;br /&gt;
Las clases principales son &lt;b&gt;XPathDocument&lt;/b&gt; que nos permite cargar el documento a utilizar, &lt;b&gt;XPathNavigator&lt;/b&gt; que nos permite realizar las consultas deseadas y &lt;b&gt;XPathIterator&lt;/b&gt; que nos trae los resultados de la consulta.&lt;br /&gt;
También existe la interface &lt;b&gt;IXPathNavigable&lt;/b&gt; que al ser implementada nos permite usar otro tipo de fuentes de datos que no sean &lt;b&gt;XML&lt;/b&gt;.&lt;br /&gt;
En este ejemplo no explico detalles sobre &lt;b&gt;XPath&lt;/b&gt; puesto que este es un blog de &lt;b&gt;.Net&lt;/b&gt; y no de &lt;b&gt;XML&lt;/b&gt; pero si quieres saber mas acerca de esta tecnología puedes visitar el tutorial de &lt;b&gt;XPath&lt;/b&gt; en &lt;b&gt;&lt;a href="http://www.w3schools.com/XPath/default.asp"&gt;http://www.w3schools.com/XPath/default.asp&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;
Consideremos el siguiente xml:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode" style="height: 250px; overflow: scroll;"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Peliculas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mazinger&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Jackie chan&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1975-03-19T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;John Wayne&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1915-10-23T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mazinger&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Estrella&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;James Cameron&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1985-02-14T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Arnold&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1953-10-11T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Protagonista&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Enemigo&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Linda Hamilton&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1972-08-12T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Protagonista&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Perseguida&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Peliculas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;Para encontrar todos los actores usaríamos este código:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;XPathDocument peliculas = &lt;span class="kwrd"&gt;new&lt;/span&gt; XPathDocument(&lt;span class="str"&gt;"peliculas.bak.xml"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;XPathNavigator pelNav = peliculas.CreateNavigator();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;XPathNodeIterator actoresIt = pelNav.Select(&lt;span class="str"&gt;"//Actor"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;"Todos los actores"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt;(actoresIt.MoveNext()) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    Console.WriteLine(&lt;span class="str"&gt;"Nombre: "&lt;/span&gt; + actoresIt.Current.SelectSingleNode(&lt;span class="str"&gt;"Nombre"&lt;/span&gt;).Value);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    Console.WriteLine(&lt;span class="str"&gt;"Fecha de nacimiento: "&lt;/span&gt; + actoresIt.Current.SelectSingleNode(&lt;span class="str"&gt;"Nacimiento"&lt;/span&gt;).Value);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;Cabe mencionar que el &lt;b&gt;API&lt;/b&gt; es de solo lectura por lo que podemos consultar información pero no modificarla.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-6329038757500700162?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0Z9_EiB4YMf3QJ44giXwx5Y11bo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Z9_EiB4YMf3QJ44giXwx5Y11bo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0Z9_EiB4YMf3QJ44giXwx5Y11bo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0Z9_EiB4YMf3QJ44giXwx5Y11bo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/LyGhMpGfY-E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/6329038757500700162/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/05/usando-xpath-en-net-framework.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/6329038757500700162?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/6329038757500700162?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/LyGhMpGfY-E/usando-xpath-en-net-framework.html" title="Usando XPath en .Net Framework" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/05/usando-xpath-en-net-framework.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMGSXs6eyp7ImA9WhZQEk4.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-5861440235812640762</id><published>2011-04-18T12:55:00.000-07:00</published><updated>2011-04-19T11:40:28.513-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T11:40:28.513-07:00</app:edited><title>Usar o no DBLinq</title><content type="html">&lt;b&gt;La respuesta rápida: no lo uses&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DBLinq&lt;/b&gt; es un proyecto muy interesante nos permite accesar a diferentes tipos de bases de datos de la misma forma en accesamos a &lt;b&gt;SQL Server&lt;/b&gt; con &lt;b&gt;Linq a SQL Server&lt;/b&gt; de &lt;b&gt;.Net Framework&lt;/b&gt;, tiene una herramienta (&lt;b&gt;DBMetal.exe&lt;/b&gt;) que nos crea un conjunto de clases equivalente a las que se crean para &lt;b&gt;Linq a SQL&lt;/b&gt; con &lt;b&gt;Visual Studio&lt;/b&gt; o &lt;b&gt;sqlmetal.exe&lt;/b&gt;.&lt;br /&gt;
Para mi lo mejor que tiene &lt;b&gt;DBLinq&lt;/b&gt; es que solo cambiando la cadena de conexión y en ocasiones cambiando un poco el código generado por &lt;b&gt;DBMetal.exe&lt;/b&gt; podemos cambiar de tipo de servidor (por ejemplo de &lt;b&gt;SQL Server&lt;/b&gt; a &lt;b&gt;MySql&lt;/b&gt; sin modificar el programa en lo más mínimo, pues la cadena de conexión se puede cambiar por ejemplo en el app.config o web.config, por lo que si escribes tu programa usando &lt;b&gt;DBLinq&lt;/b&gt; tienes soporte instantaneo para todas las bases de datos que soporta este framework y las que soporte en el futuro.&lt;br /&gt;
Entonces por que recomiendo que no lo uses?&lt;br /&gt;
Aquí vienen las malas noticias, el proyecto tiene errores que lo hacen simplemente inutilizable, simplemente &lt;b&gt;DBMetal.exe&lt;/b&gt; no puede manejar cualquier base de datos, basta que tengamos alguna asociación de tablas que no le guste al programa y nos mandara un error mientras que &lt;b&gt;sqlmetal.exe&lt;/b&gt; puede manejar la misma base de datos sin problemas.&lt;br /&gt;
Aun así con un poco de trabajo se puede crear las clases necesarias y usar &lt;b&gt;DBLinq&lt;/b&gt; en cualquier base de datos, sin embargo nos topamos con el siguiente problema: los querys regresan datos incorrectos.&lt;br /&gt;
Así es, lo corrobore con &lt;b&gt;Linq a SQL&lt;/b&gt;, &lt;b&gt;Linq a objetos&lt;/b&gt; y otros frameworks e indudablemente &lt;b&gt;DBLinq&lt;/b&gt; regresa datos incorrectos, solo funciona para las bases de datos y querys mas triviales.&lt;br /&gt;
&lt;br /&gt;
Más aun el proyecto a abril del 2011 parece abandonado y no ha habido cambios en el código durante más de un año.&lt;br /&gt;
La buena noticia es que el proyecto ahora se incluye como parte de &lt;b&gt;Mono&lt;/b&gt; y los desarrolladores de &lt;b&gt;Mono&lt;/b&gt; arreglan los errores que se reportan con mucha rapidez, yo pretendo trabajar un poco con ellos ya que en realidad el proyecto tiene un potencial muy grande y ya me gustaría estarlo usando en todos mis proyectos actuales.&lt;br /&gt;
&lt;br /&gt;
En conclusión: De momento no cambies todavía a &lt;b&gt;DBLinq&lt;/b&gt; pero mantén un ojo en el proyecto debido a su potencial.&lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre &lt;b&gt;Linq&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-linq.html"&gt;&lt;b&gt;Lista de artículos acerca de Linq&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-5861440235812640762?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iRROmk562HjTFwpAx78AFfte93U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iRROmk562HjTFwpAx78AFfte93U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iRROmk562HjTFwpAx78AFfte93U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iRROmk562HjTFwpAx78AFfte93U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/z7bwpg5m7hk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/5861440235812640762/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/04/usar-o-no-dblinq.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/5861440235812640762?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/5861440235812640762?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/z7bwpg5m7hk/usar-o-no-dblinq.html" title="Usar o no DBLinq" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/04/usar-o-no-dblinq.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUABQXYyeip7ImA9WhZRGEw.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-6575543823306425181</id><published>2011-04-14T13:42:00.000-07:00</published><updated>2011-04-14T13:42:30.892-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-14T13:42:30.892-07:00</app:edited><title>LibCurlNet: alternativa a WebRequest</title><content type="html">&lt;b&gt;Curl&lt;/b&gt; es una librería escrita en &lt;b&gt;C&lt;/b&gt; para utilizar diversos protocolos de red y &lt;b&gt;LibCurlNet&lt;/b&gt; es un wrapper de la librería para usarla en &lt;b&gt;.Net Framework&lt;/b&gt; es una buena alternativa para las clases que derivan de &lt;b&gt;WebRequest&lt;/b&gt; sobre todo si quieres usar un protocolo no so soportado por &lt;b&gt;WebRequest&lt;/b&gt;, los protocolos que soporta esta &lt;b&gt;API&lt;/b&gt; son &lt;b&gt;HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, TELNET, LDAP, DICT y FILE&lt;/b&gt;.&lt;br /&gt;
Además &lt;b&gt;WebRequest&lt;/b&gt; a veces falla sin ninguna razón aparente y también en estos casos podrías usar &lt;b&gt;Curl&lt;/b&gt; como una alternativa.&lt;br /&gt;
Se puede descargar &lt;a href="http://curl.haxx.se/libcurl/dotnet/"&gt;desde el sitio de &lt;b&gt;LibCurlNet&lt;/b&gt;&lt;/a&gt;. &lt;br /&gt;
&lt;b&gt;LibCurlNet&lt;/b&gt; nos presenta dos formas de uso principalmente la llamada &lt;b&gt;easy&lt;/b&gt; y la llamada &lt;b&gt;multi&lt;/b&gt;, En esta entrada hablare de la interfaz &lt;b&gt;easy&lt;/b&gt; con &lt;b&gt;HTTP&lt;/b&gt; que como su nombre nos indica es muy sencilla de usar, un poco más complicado que &lt;b&gt;WebRequest&lt;/b&gt; pero no demasiado.&lt;br /&gt;
El &lt;b&gt;API&lt;/b&gt; se accede en el espacio de nombres &lt;b&gt;SeasideResearch.LibCurlNet&lt;/b&gt; y lo primero que hay que hacer es inicializar el &lt;b&gt;API&lt;/b&gt; con la llamada al método &lt;b&gt;Curl.GlobalInit&lt;/b&gt; y al terminar de usar el &lt;b&gt;API&lt;/b&gt; se usa necesariamente el método &lt;b&gt;Curl.GlobalCleanup&lt;/b&gt;, es muy importante hacer estas llamadas solo una vez en toda la vida del programa de lo contrario obtendremos errores.&lt;br /&gt;
Ahora pasamos a usar la clase &lt;b&gt;Easy&lt;/b&gt; para bajar un archivo &lt;b&gt;html&lt;/b&gt; con la operación &lt;b&gt;GET&lt;/b&gt; (también se soporta &lt;b&gt;POST&lt;/b&gt; y &lt;b&gt;PUT&lt;/b&gt;).&lt;br /&gt;
El wrapper usa casi directamente el &lt;b&gt;API&lt;/b&gt; en &lt;b&gt;C&lt;/b&gt; y no esta muy orientada a objetos pero aún así resulta muy sencilla de utilizar en general usamos la funcíon &lt;b&gt;SetOpt&lt;/b&gt; del objeto &lt;b&gt;Easy&lt;/b&gt; para establecer las opciones de transferencia incluyendo la URL, proxy, headers, seguimiento de redirecciones, etc y utilizamos la llamada a Perform para obtener el resultado, aquí es donde esta la mayor diferencia entre &lt;b&gt;WebRequest&lt;/b&gt; y &lt;b&gt;CURL&lt;/b&gt;, la llamada a &lt;b&gt;Perform&lt;/b&gt; por si misma lleva a cabo toda la transferencia, pero lo único que nos da como resultado es código que nos indica si se realizo la transferencia o no y la causa del fallo, para obtener los datos tenemos que escribir una función que usara el objeto &lt;b&gt;Easy&lt;/b&gt; (como un delegado) para transmitirnos los datos en forma de un arreglo de bytes y es nuestra responsabilidad decidir que hacemos con esos bytes.&lt;br /&gt;
También podemos obtener el código &lt;b&gt;http&lt;/b&gt; de la respuesta con la función &lt;b&gt;GetInfo&lt;/b&gt;.&lt;br /&gt;
Si queremos remplazar o eliminar los headers que manda &lt;b&gt;Curl&lt;/b&gt; automáticamente&amp;nbsp; podemos agregar estos headers con o sin valor y se eliminaran o remplazaran en la transferencia.&lt;br /&gt;
El mismo objeto &lt;b&gt;Easy&lt;/b&gt; se puede usar cuantas veces queramos para diferentes URLs y el mismo tratara de reutilizar la misma conexión a menos que se indique lo contrario, cuando se termine de usar debemos llamar a &lt;b&gt;easy.Cleanup&lt;/b&gt; antes de la llamada a &lt;b&gt;Curl.GlobalCleanup&lt;/b&gt; de lo contrario se provocara un error.&lt;br /&gt;
A continuación les dejo el ejemplo en &lt;b&gt;C#&lt;/b&gt; que explica el proceso por si mismo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[] args) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    Curl.GlobalInit((&lt;span class="kwrd"&gt;int&lt;/span&gt;)CURLinitFlag.CURL_GLOBAL_ALL);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    Easy easy = &lt;span class="kwrd"&gt;new&lt;/span&gt; Easy();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_URL, &lt;span class="str"&gt;"http://localhost/"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_FOLLOWLOCATION, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_CONNECTTIMEOUT, 10);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_TIMEOUT, 90);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_PROXY, &lt;span class="str"&gt;"http://localhost:8080"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_USERAGENT, &lt;span class="str"&gt;"My Download"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_ENCODING, &lt;span class="str"&gt;"gzip,deflate"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_FAILONERROR, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    Slist headers = &lt;span class="kwrd"&gt;new&lt;/span&gt; Slist();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    headers.Append(&lt;span class="str"&gt;"Pragma:"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    headers.Append(&lt;span class="str"&gt;"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_HTTPHEADER, headers);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    List&amp;lt;&lt;span class="kwrd"&gt;byte&lt;/span&gt;&amp;gt; buffer = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;byte&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    Easy.WriteFunction writer = &lt;span class="kwrd"&gt;new&lt;/span&gt; Easy.WriteFunction(OnWriteData);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_WRITEFUNCTION, writer);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    easy.SetOpt(CURLoption.CURLOPT_WRITEDATA, buffer);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    easy.Perform();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; code = 0;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    easy.GetInfo(CURLINFO.CURLINFO_RESPONSE_CODE, &lt;span class="kwrd"&gt;ref&lt;/span&gt; code);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    easy.Cleanup();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    Curl.GlobalCleanup();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; content = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt;(MemoryStream mStream = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream(buffer.ToArray())) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="kwrd"&gt;using&lt;/span&gt;(StreamReader reader&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            = &lt;span class="kwrd"&gt;new&lt;/span&gt; StreamReader(mStream, Encoding.UTF8)) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            content = reader.ReadToEnd();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;    Console.WriteLine(&lt;span class="str"&gt;"Status: "&lt;/span&gt; + code.ToString());&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;    Console.WriteLine(content);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;    Console.WriteLine(&lt;span class="str"&gt;"leido"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;    Console.ReadLine();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Int32 OnWriteData(Byte[] buf, Int32 size, Int32 nmemb&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;    , Object extractData) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;    List&amp;lt;&lt;span class="kwrd"&gt;byte&lt;/span&gt;&amp;gt; buffer = (List&amp;lt;&lt;span class="kwrd"&gt;byte&lt;/span&gt;&amp;gt;)extractData;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;    buffer.AddRange(buf);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; size * nmemb;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-6575543823306425181?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Xv3bM-bzAgcz_gu2ayvaLsi7JO8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xv3bM-bzAgcz_gu2ayvaLsi7JO8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Xv3bM-bzAgcz_gu2ayvaLsi7JO8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xv3bM-bzAgcz_gu2ayvaLsi7JO8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/qmAAG5iTCNI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/6575543823306425181/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/04/libcurlnet-alternativa-webrequest.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/6575543823306425181?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/6575543823306425181?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/qmAAG5iTCNI/libcurlnet-alternativa-webrequest.html" title="LibCurlNet: alternativa a WebRequest" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/04/libcurlnet-alternativa-webrequest.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUECQHY9cCp7ImA9WhZSFkU.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-124390901081972965</id><published>2011-04-01T12:54:00.000-07:00</published><updated>2011-04-01T12:54:21.868-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-01T12:54:21.868-07:00</app:edited><title>Lista de articulos acerca del uso de XML en .Net Framework</title><content type="html">Esta es una lista de artículos acerca del uso de &lt;b&gt;XML&lt;/b&gt; en &lt;b&gt;.Net Framework&lt;/b&gt; en este sitio.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/03/linq-xsd-leyendo-xml-con-tipos.html"&gt;Linq a XSD: leyendo xml con tipos&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/02/leyendo-y-escribiendo-xml-con-linq-en.html"&gt;Leyendo y Escribiendo XML con Linq en Visual Basic&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/02/creando-datasets-tipeados-partir-de.html"&gt;Creando DataSets tipeados a partir de cualquier XML&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/03/validando-esquemas-xml-con-net.html"&gt;Validando esquemas xml con .Net Framework&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2010/02/leyendo-y-escribiendo-xml-con-linq.html"&gt;Leyendo y Escribiendo XML con Linq en c#&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/03/instalar-linq-xsd.html"&gt;Instalar Linq a XSD&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-124390901081972965?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1bWsW3NboZhhnRa8-zfc6QoVKx4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1bWsW3NboZhhnRa8-zfc6QoVKx4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1bWsW3NboZhhnRa8-zfc6QoVKx4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1bWsW3NboZhhnRa8-zfc6QoVKx4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/LxeBKEnSq2c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/124390901081972965/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/04/lista-de-articulos-acerca-del-uso-de.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/124390901081972965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/124390901081972965?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/LxeBKEnSq2c/lista-de-articulos-acerca-del-uso-de.html" title="Lista de articulos acerca del uso de XML en .Net Framework" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/04/lista-de-articulos-acerca-del-uso-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YFR308eSp7ImA9WhZSGUk.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-2646270299172840874</id><published>2011-03-30T14:35:00.000-07:00</published><updated>2011-04-04T12:25:16.371-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T12:25:16.371-07:00</app:edited><title>Validando esquemas xml con .Net Framework</title><content type="html">Uno de los objetivos de los &lt;b&gt;esquemas xml&lt;/b&gt; (&lt;b&gt;archivos .xsd&lt;/b&gt;) es poder validar que un archivo &lt;b&gt;xm&lt;/b&gt;l cumpla con las reglas que se especifican en el esquema, &lt;b&gt;.Net&lt;/b&gt; tiene el &lt;b&gt;API&lt;/b&gt; necesaria para realizar esta validación y es muy sencillo.&lt;br /&gt;
Consideremos el siguiente esquema:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode" style="height: 250px; overflow: scroll;"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;standalone&lt;/span&gt;&lt;span class="kwrd"&gt;="yes"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:schema&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="Peliculas"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                     &lt;span class="attr"&gt;targetNamespace&lt;/span&gt;&lt;span class="kwrd"&gt;="ProbadorConsola"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                     &lt;span class="attr"&gt;xmlns:xs&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                     &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="ProbadorConsola"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                     &lt;span class="attr"&gt;elementFormDefault&lt;/span&gt;&lt;span class="kwrd"&gt;="qualified"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Peliculas"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:choice&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Pelicula"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Titulo"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Director"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Estrenado"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Actores"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Actor"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Nombre"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Nacimiento"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Roles"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Rol"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                                  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                                      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="NombrePelicula"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                                      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="NombreRol"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                                  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                              &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:choice&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:schema&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Y el contenido &lt;b&gt;xml&lt;/b&gt; que queremos validar:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode" style="height: 250px; overflow: scroll;"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Peliculas&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="ProbadorConsola"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mazinger&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Jackie Chan&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1975-03-19T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;John Wayne&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1915-10-23T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mazinger&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Estrella&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Peliculas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Lo primero que debemos hacer es validar que el documento contenga el espacio de nombres del esquema si no lo contiene la validación fallara diciéndonos que el documento es valido aun cuando en realidad no cumpla las reglas del esquema.&lt;br /&gt;
El código para encontrar el espacio de nombres (c#):&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;XDocument peliculas = XDocument.Load(&lt;span class="str"&gt;"peliculas.xml"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;XPathNavigator nav = peliculas.CreateNavigator();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;nav.MoveToFollowing(XPathNodeType.Element);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;IDictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; ns&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    = nav.GetNamespacesInScope(XmlNamespaceScope.All);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;bool&lt;/span&gt; schemaFound = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(KeyValuePair&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; namespaces &lt;span class="kwrd"&gt;in&lt;/span&gt; ns) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt;(namespaces.Value.CompareTo(&lt;span class="str"&gt;"ProbadorConsola"&lt;/span&gt;) == 0)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        schemaFound = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(!schemaFound) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    Console.WriteLine(&lt;span class="str"&gt;"Esquema no encontrado"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;Ahora si podemos proceder a validar el documento con el esquema que puede estar en un archivo local o en Internet:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;XmlSchemaSet schema = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlSchemaSet();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;schema.Add(&lt;span class="str"&gt;"ProbadorConsola"&lt;/span&gt;, &lt;span class="str"&gt;"peliculas.xsd"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;peliculas.Validate(schema, &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;"Esquema valido"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;Console.ReadLine();&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Hacemos notar que si utilizas &lt;a href="http://solonetframework.blogspot.com/2011/03/linq-xsd-leyendo-xml-con-tipos.html"&gt;&lt;b&gt;Linq a XSD&lt;/b&gt;&lt;/a&gt; todo esto lo hace en una sola linea de código al cargar el documento.&lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre el uso de &lt;b&gt;XML&lt;/b&gt; en &lt;b&gt;.Net Framework&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/04/lista-de-articulos-acerca-del-uso-de.html"&gt;&lt;b&gt;Lista de artículos acerca del uso de XML en .Net Framework&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-2646270299172840874?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NevkfK1JN7scrfceenOrlNf_cjo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NevkfK1JN7scrfceenOrlNf_cjo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NevkfK1JN7scrfceenOrlNf_cjo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NevkfK1JN7scrfceenOrlNf_cjo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/cMLajlE3VYg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/2646270299172840874/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/03/validando-esquemas-xml-con-net.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/2646270299172840874?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/2646270299172840874?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/cMLajlE3VYg/validando-esquemas-xml-con-net.html" title="Validando esquemas xml con .Net Framework" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/03/validando-esquemas-xml-con-net.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QEQ3Y7eip7ImA9WhZSGUk.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-1588825364349453659</id><published>2011-03-26T13:01:00.000-07:00</published><updated>2011-04-04T12:28:22.802-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T12:28:22.802-07:00</app:edited><title>Instalar Linq a XSD</title><content type="html">En una &lt;a href="http://solonetframework.blogspot.com/2011/03/linq-xsd-leyendo-xml-con-tipos.html"&gt;entrada anterior&lt;/a&gt; ya vimos lo que se puede hacer con &lt;b&gt;Linq a XSD&lt;/b&gt; pero dejamos el proceso de instalación pendiente ya que es un poco complicado y merece una entrada independiente.&lt;br /&gt;
&lt;b&gt;Linq a XSD&lt;/b&gt; es muy útil y no deberíamos detenernos en su uso debido a las pocas complicaciones que tiene su instalación sobre todo tomando en cuenta que es un proyecto de &lt;b&gt;Microsoft&lt;/b&gt; y probablemente se incluya en versiones futuras de &lt;b&gt;Visual Studio&lt;/b&gt;.&lt;br /&gt;
Bueno lo primero es descargarlo desde &lt;a href="http://linqtoxsd.codeplex.com/"&gt;el proyecto de &lt;b&gt;Linq a XSD&lt;/b&gt; en &lt;b&gt;Codeplex&lt;/b&gt;&lt;/a&gt; y colocar los archivos descargados en una carpeta preferentemente dentro de la carpeta de nuestra solución, en nuestro ejemplo se colocara en la carpeta Components\LinqToXsd\bin en la raíz de nuestra solución y añadimos los archivos en una carpeta de solución solo para recordarnos donde están y no es un paso obligatorio.&lt;br /&gt;
Ahora abrimos las propiedades del proyecto en que vamos a usarlo y en la pestaña &lt;b&gt;Build Events&lt;/b&gt; en el recuadro &lt;b&gt;Pre-build event command line&lt;/b&gt; colocamos el siguiente texto:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SET LINQTOXSDBINDIR=$(SolutionDir)Components\LinqToXsd\bin&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Cuidando que la ruta apunte a donde pusimos los archivos.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-wNsGMWY5Iks/TY5DmBin5ZI/AAAAAAAAAEM/V4ZJbH5C9io/s1600/lx1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="72" src="https://lh6.googleusercontent.com/-wNsGMWY5Iks/TY5DmBin5ZI/AAAAAAAAAEM/V4ZJbH5C9io/s320/lx1.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Ahora necesitamos modificar el archivo csproj de la solución (&lt;b&gt;Linq a XSD&lt;/b&gt; solo funciona en &lt;b&gt;C-Sharp&lt;/b&gt;, pero puedes hacer una DLL que después utilizaras en &lt;b&gt;VB.Net&lt;/b&gt;), para esto descargamos la solución, en el explorador de la solución escogemos el proyecto que estamos usando, click derecho y &lt;b&gt;Unload Project&lt;/b&gt;, click derecho y &lt;b&gt;Edit&lt;/b&gt; proyecto.csproj.&lt;br /&gt;
Vamos al final del archivo y después del cierre del último elemento &amp;lt;propertygroup&amp;gt; ponemos este código:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;PropertyGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LinqToXsdBinDir&lt;/span&gt; &lt;span class="attr"&gt;Condition&lt;/span&gt;&lt;span class="kwrd"&gt;="'$(LinqToXsdBinDir)' == ''"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;$(SolutionDir)Components\LinqToXsd\bin&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LinqToXsdBinDir&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;PropertyGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Nótese que al pegar el código &lt;b&gt;Visual Studio&lt;/b&gt; lo formatea poniéndole lineas nuevas alrededor de la ruta, debemos modificar esto de tal forma que la quede igual que en el código de ejemplo de lo contrario tendremos errores. A continuación muestro la forma en que NO debe quedar la modificación&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;PropertyGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;LinqToXsdBinDir&lt;/span&gt; &lt;span class="attr"&gt;Condition&lt;/span&gt;&lt;span class="kwrd"&gt;="'$(LinqToXsdBinDir)' == ''"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        $(SolutionDir)Components\LinqToXsd\bin&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;LinqToXsdBinDir&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;PropertyGroup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Falta introducir otro código en el mismo archivo, también al final del archivo después de el cierre del último elemento &amp;lt;import&amp;gt; colocamos el siguiente código:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Import&lt;/span&gt; &lt;span class="attr"&gt;Project&lt;/span&gt;&lt;span class="kwrd"&gt;="$(LinqToXsdBinDir)\LinqToXsd.targets"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Listo recargamos la solución y al archivo .xsd para el que queremos crear las clases le cambiamos el &lt;b&gt;Build Action&lt;/b&gt; a &lt;b&gt;LinqToXsdSchema&lt;/b&gt; compilamos y se nos generan las clases que necesitamos, es necesario notar que las clases se encuentran en el espacio de nombres indicado en el atributo &lt;b&gt;targetNamespace&lt;/b&gt; del esquema xml (.xsd) y no en el de nuestro proyecto por lo que debemos buscar las clases en ese espacio de nombres.&lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre &lt;b&gt;Linq&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-linq.html"&gt;&lt;b&gt;Lista de artículos acerca de Linq&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre el uso de &lt;b&gt;XML&lt;/b&gt; en &lt;b&gt;.Net Framework&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/04/lista-de-articulos-acerca-del-uso-de.html"&gt;&lt;b&gt;Lista de artículos acerca del uso de XML en .Net Framework&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-1588825364349453659?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4qxD14-82F4PwkITrj09bTI1uiI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4qxD14-82F4PwkITrj09bTI1uiI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4qxD14-82F4PwkITrj09bTI1uiI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4qxD14-82F4PwkITrj09bTI1uiI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/sM3YD1x7kjE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/1588825364349453659/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/03/instalar-linq-xsd.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/1588825364349453659?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/1588825364349453659?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/sM3YD1x7kjE/instalar-linq-xsd.html" title="Instalar Linq a XSD" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-wNsGMWY5Iks/TY5DmBin5ZI/AAAAAAAAAEM/V4ZJbH5C9io/s72-c/lx1.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/03/instalar-linq-xsd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMARHw8eyp7ImA9WhZTFUs.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-8127566348853050765</id><published>2011-03-18T14:47:00.001-07:00</published><updated>2011-03-19T12:37:25.273-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-19T12:37:25.273-07:00</app:edited><title>Cobertura de código (Code Coverage) con pruebas unitarias de Visual Studio</title><content type="html">Una de las funciones que tiene los proyectos de pruebas de &lt;b&gt;Visual Studio&lt;/b&gt; es la &lt;b&gt;Cobertura de Código&lt;/b&gt; o &lt;b&gt;Code Coverage&lt;/b&gt;  en ingles, esta función nos permite saber que porcentaje del código de  nuestro proyecto estamos probando lo cual es muy importante pues puede  haber errores en el código que no estamos probando y esta función nos da  una idea de que pruebas nos faltan por escribir.&lt;br /&gt;
&lt;br /&gt;
Para habilitar la &lt;b&gt;cobertura de código&lt;/b&gt; previo requisito es que tengamos una versión de &lt;b&gt;Visual Studio&lt;/b&gt; que tenga soporte para proyectos de prueba, al crear nuestro proyecto de prueba &lt;b&gt;Visual Studio&lt;/b&gt; crea automáticamente un archivo llamado &lt;b&gt;LocalTestRun.testrunconfig&lt;/b&gt; en una carperta &lt;b&gt;Elementos de la solución&lt;/b&gt; (&lt;b&gt;Solution Items&lt;/b&gt;) directamente bajo la solución para habilitar la &lt;b&gt;cobertura de código&lt;/b&gt;  hacemos doble click en este archivo y nos aparecerá la ventana de  configuración de las pruebas en esta ventana escogemos la sección &lt;b&gt;Cobertura de Código&lt;/b&gt;  y nos aparece una lista con las dll's y ejecutables que produce nuestra  solución debemos marcar los elementos para los que queremos habilitar  la &lt;b&gt;cobertura de código&lt;/b&gt; aplicamos los cambios cerramos y listo ya tenemos habilitada la &lt;b&gt;cobertura de código&lt;/b&gt; en nuestras pruebas.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-W8UrHwjV20Q/TYPPjpu5fjI/AAAAAAAAAD4/KfaZvhnmRBs/s1600/cc1.JPG" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="229" src="https://lh3.googleusercontent.com/-W8UrHwjV20Q/TYPPjpu5fjI/AAAAAAAAAD4/KfaZvhnmRBs/s320/cc1.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Para obtener los resultados ejecutamos las pruebas que queremos analizar y abrimos el panel &lt;b&gt;Resultado de Cobertura de Código&lt;/b&gt; (&lt;b&gt;Code Coverage Results&lt;/b&gt;)  aquí vemos una lista que nos muestra detalle los porcentajes de código  que estamos probando pudiendo expandir la lista hasta saber exactamente  que parte del código se probo en que porcentaje.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-h1fUC2kdZH0/TYPUI3OsbNI/AAAAAAAAAEA/uNVRK58qx0M/s1600/cc2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="97" src="https://lh3.googleusercontent.com/-h1fUC2kdZH0/TYPUI3OsbNI/AAAAAAAAAEA/uNVRK58qx0M/s320/cc2.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
En  la imagen podemos ver que solo se probo el 4 por ciento del código con  lo cual sabemos que nos falta mucho por probar, por supuesto es un  ejemplo solo demostrativo.&lt;br /&gt;
&lt;br /&gt;
Para aprender más acerca de las pruebas unitarias con .Net Framework visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-pruebas.html"&gt;Lista de artículos acerca de pruebas unitarias con .Net Framework&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-8127566348853050765?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aYToEvcBuE8sdkbSVF0rE1gez0A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aYToEvcBuE8sdkbSVF0rE1gez0A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aYToEvcBuE8sdkbSVF0rE1gez0A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aYToEvcBuE8sdkbSVF0rE1gez0A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/chCWSjYUNh8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/8127566348853050765/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/03/cobertura-de-codigo-code-coverage-con.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8127566348853050765?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8127566348853050765?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/chCWSjYUNh8/cobertura-de-codigo-code-coverage-con.html" title="Cobertura de código (Code Coverage) con pruebas unitarias de Visual Studio" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/-W8UrHwjV20Q/TYPPjpu5fjI/AAAAAAAAAD4/KfaZvhnmRBs/s72-c/cc1.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/03/cobertura-de-codigo-code-coverage-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QHSX46eip7ImA9WhZTFEU.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-8142574504121847016</id><published>2011-03-16T13:55:00.000-07:00</published><updated>2011-03-18T14:55:38.012-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-18T14:55:38.012-07:00</app:edited><title>Integrar NUnit a Visual Studio</title><content type="html">Hay varias formas de integrar &lt;b&gt;NUnit&lt;/b&gt; a &lt;b&gt;Visual Studio&lt;/b&gt;, aquí mostrare la más sencilla y la que me parece la más conveniente.&lt;br /&gt;
Siguiendo las instrucciones del &lt;a href="http://www.nunit.org/index.php?p=vsSupport&amp;amp;r=2.2.10"&gt;sitio de &lt;b&gt;NUnit&lt;/b&gt;&lt;/a&gt; agregamos una herramienta personalizada a &lt;b&gt;Visual Studio&lt;/b&gt; y le agregamos los parámetros necesarios para ejecutar NUnit en el proyecto actual estos datos son:&lt;br /&gt;
&lt;br /&gt;
Titulo: NUnit&lt;br /&gt;
Comando: C:\Program Files\NUnit 2.5.1\bin\net-2.0\nunit.exe&lt;br /&gt;
ajustando la ruta a donde tenemos instalado NUnit&lt;br /&gt;
Argumentos: $(ProjectDir)$(ProjectFileName)&lt;br /&gt;
Directorio Inicial: $(ProjectDir)bin/Debug/&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-vbUC69f-0zc/TYEeEzjNnDI/AAAAAAAAADk/5BHesqE3JcY/s1600/Nunit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="315" src="https://lh6.googleusercontent.com/-vbUC69f-0zc/TYEeEzjNnDI/AAAAAAAAADk/5BHesqE3JcY/s320/Nunit.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Eso es todo seleccionamos en el editor un archivo que este en un proyecto de pruebas &lt;b&gt;NUnit&lt;/b&gt; y en el menú de herramientas seleccionamos &lt;b&gt;NUnit&lt;/b&gt; y se abrira &lt;b&gt;NUnit&lt;/b&gt; usando el proyecto de pruebas seleccionado, nótese que tiene que estar abierto y activo en el editor algún archivo que pertenezca a un proyecto de pruebas de &lt;b&gt;NUnit&lt;/b&gt; de lo contrario nos marcara un error.&lt;br /&gt;
&lt;br /&gt;
La otra opción es mucho mejor ya que integra los proyectos de pruebas de &lt;b&gt;NUnit&lt;/b&gt; con la interfaz de &lt;b&gt;Visual Studio&lt;/b&gt; sin necesidad de abrir el ejecutable de &lt;b&gt;NUnit&lt;/b&gt; y mostrando los resultados dentro de la pantalla de &lt;b&gt;Visual Studio&lt;/b&gt;, el requisito es que tengamos una versión de &lt;b&gt;Visual Studio&lt;/b&gt; que soporte proyectos de prueba.&lt;br /&gt;
Esto se logra usando el componente &lt;b&gt;NUnitForVS&lt;/b&gt; que podemos bajar de &lt;a href="http://nunitforvs.codeplex.com/"&gt;&lt;b&gt;CodePlex&lt;/b&gt;&lt;/a&gt; y funciona para las versiones 2008 y 2010 de &lt;b&gt;Visual Studio&lt;/b&gt;.&lt;br /&gt;
Después de instalar el complemento tenemos que modificar los proyectos de &lt;b&gt;NUnit&lt;/b&gt; en nuestras soluciones lo que debemos hacer es descargar el proyecto de la solución (Unload Project desde el explorador de soluciones) y editar el archivo csproj tenemos que añadir la siguientes lineas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;projecttypeguids&amp;gt;{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}&amp;lt;/projecttypeguids&amp;gt;&lt;br /&gt;
&lt;br /&gt;
al final de la primer sección &amp;lt;propertygroup&amp;gt; que encontremos en el archivo.&lt;br /&gt;
Después de esto ya estamos listos para ejecutar nuestras pruebas abrimos la ventana Vista de Pruebas (Test View) y encontraremos nuestras de &lt;b&gt;NUnit&lt;/b&gt; mezcladas con las pruebas de &lt;b&gt;Visual Studio&lt;/b&gt; (si es que tenemos alguna) e identificadas por un icono de una N al pricipio:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-JyQX3LxoTrQ/TYEh338CSZI/AAAAAAAAADo/mM8ai-wRY34/s1600/testview.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="149" src="https://lh3.googleusercontent.com/-JyQX3LxoTrQ/TYEh338CSZI/AAAAAAAAADo/mM8ai-wRY34/s320/testview.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Ejecutamos las pruebas y obtenemos los resultados en el panel de resultados de las pruebas:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-TCUUCRMtYMc/TYPUtvyn6jI/AAAAAAAAAEE/Y_1XlQKbMWk/s1600/TestResults.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="91" src="https://lh5.googleusercontent.com/-TCUUCRMtYMc/TYPUtvyn6jI/AAAAAAAAAEE/Y_1XlQKbMWk/s320/TestResults.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Para aprender más acerca de las pruebas unitarias con .Net Framework visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-pruebas.html"&gt;Lista de artículos acerca de pruebas unitarias con .Net Framework&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-8142574504121847016?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LzBdqYXbuf3CvYjmuPne2yiFmBY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LzBdqYXbuf3CvYjmuPne2yiFmBY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LzBdqYXbuf3CvYjmuPne2yiFmBY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LzBdqYXbuf3CvYjmuPne2yiFmBY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/ep7LoB8e13Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/8142574504121847016/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/03/integrar-nunit-visual-studio.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8142574504121847016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8142574504121847016?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/ep7LoB8e13Q/integrar-nunit-visual-studio.html" title="Integrar NUnit a Visual Studio" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-vbUC69f-0zc/TYEeEzjNnDI/AAAAAAAAADk/5BHesqE3JcY/s72-c/Nunit.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/03/integrar-nunit-visual-studio.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEARHc4fyp7ImA9WhZSGUk.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-7143106101967239389</id><published>2011-03-08T13:41:00.000-08:00</published><updated>2011-04-04T12:17:25.937-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T12:17:25.937-07:00</app:edited><title>Linq a XSD: leyendo xml con tipos</title><content type="html">Como hemos comentado en una &lt;a href="http://solonetframework.blogspot.com/2010/02/leyendo-y-escribiendo-xml-con-linq.html"&gt;entrada anterior&lt;/a&gt; &lt;b&gt;es muy fácil usar xml con Linq en .Net&lt;/b&gt;, pues bien es posible usarlo aun mas fácilmente usando &lt;b&gt;Linq a Xsd&lt;/b&gt; que es un proyecto de &lt;b&gt;Microsoft&lt;/b&gt; disponible en &lt;a href="http://linqtoxsd.codeplex.com/"&gt;&lt;b&gt;CodePlex&lt;/b&gt;&lt;/a&gt; y que nos permite crear una estructura de clases a partir de un &lt;b&gt;esquema de xml&lt;/b&gt; que representa el contenido de nuestro &lt;b&gt;xml&lt;/b&gt;, obviamente el requisito es que tengamos o creemos un &lt;b&gt;esquema xml&lt;/b&gt; para poder usar esta característica. Recordemos que en una &lt;a href="http://solonetframework.blogspot.com/2011/02/creando-datasets-tipeados-partir-de.html"&gt;entrada anterior&lt;/a&gt; vimos como crear esquemas con herramientas disponibles libremente.&lt;br /&gt;
&lt;br /&gt;
Instalar esta herramienta es un poco complicado por lo que en esta entrada solo dare una breve introducción a lo que se puede hacer con esta herramienta y en otra entrada incluire otros ejemplos incluyendo el procedimiento de instalación.&lt;br /&gt;
&lt;br /&gt;
Lo primero es tener a la mano nuestro esquema consideremos este xsd:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode" style="height: 250px; overflow: scroll;"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;standalone&lt;/span&gt;&lt;span class="kwrd"&gt;="yes"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:schema&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="Peliculas"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                     &lt;span class="attr"&gt;targetNamespace&lt;/span&gt;&lt;span class="kwrd"&gt;="ProbadorConsola"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                     &lt;span class="attr"&gt;xmlns:xs&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/2001/XMLSchema"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;                     &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="ProbadorConsola"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                     &lt;span class="attr"&gt;elementFormDefault&lt;/span&gt;&lt;span class="kwrd"&gt;="qualified"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Peliculas"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:choice&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Pelicula"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Titulo"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Director"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Estrenado"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Actores"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Actor"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Nombre"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Nacimiento"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Roles"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                              &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="Rol"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="unbounded"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                                  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;                                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                                      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="NombrePelicula"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                                      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="NombreRol"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="xs:string"&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                                  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                              &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;              &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:choice&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xs:schema&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Y después el archivo xml que vamos a utilizar:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode" style="height: 250px; overflow: scroll;"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Peliculas&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="ProbadorConsola"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mazinger&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Jackie chan&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1975-03-19T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;John Wayne&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1915-10-23T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mazinger&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Estrella&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;James Cameron&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1985-02-14T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Arnold&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1953-10-11T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Protagonista&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Enemigo&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Linda Hamilton&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1972-08-12T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Protagonista&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Terminator&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Perseguida&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Peliculas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Linq a XSD&lt;/b&gt; nos genera una jerarquía de clases que nos permite manejar el xml usando datos tipeados con soporte de Intellisense y comprobación por parte del compilador, por ejemplo para listar los datos de todos los actores:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;Peliculas peliculas = Peliculas.Load(&lt;span class="str"&gt;"peliculas.bak.xml"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;var actores = from p &lt;span class="kwrd"&gt;in&lt;/span&gt; peliculas.Pelicula&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;              from a &lt;span class="kwrd"&gt;in&lt;/span&gt; p.Actores&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;              from actor &lt;span class="kwrd"&gt;in&lt;/span&gt; a.Actor&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;              select actor;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;Console.WriteLine(&lt;span class="str"&gt;"Todos los actores"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var actor &lt;span class="kwrd"&gt;in&lt;/span&gt; actores) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    Console.Out.WriteLine(&lt;span class="str"&gt;"Nombre: "&lt;/span&gt; + actor.Nombre);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    Console.Out.WriteLine(&lt;span class="str"&gt;"Fecha de nacimiento: "&lt;/span&gt; + actor.Nacimiento);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
En conclusion &lt;b&gt;Linq a XSD&lt;/b&gt; es un complemento muy útil para el manejo de &lt;b&gt;XML&lt;/b&gt; en &lt;b&gt;.Net Framework.&lt;/b&gt;&lt;br /&gt;
Hay que tener en cuenta que el proyecto a Marzo del 2011 aún esta en etapa Beta y es mejor probar bien nuestro código para evitar errores inesperados, como sea el proyecto es muy útil y es probable que posteriormente sea incluido como parte del &lt;b&gt;.Net Framework&lt;/b&gt;. &lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre &lt;b&gt;Linq&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-linq.html"&gt;&lt;b&gt;Lista de artículos acerca de Linq&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre el uso de &lt;b&gt;XML&lt;/b&gt; en &lt;b&gt;.Net Framework&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/04/lista-de-articulos-acerca-del-uso-de.html"&gt;&lt;b&gt;Lista de artículos acerca del uso de XML en .Net Framework&lt;/b&gt;&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-7143106101967239389?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nOHeQWKX1tlKwuhc6X0No_N-C4A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nOHeQWKX1tlKwuhc6X0No_N-C4A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nOHeQWKX1tlKwuhc6X0No_N-C4A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nOHeQWKX1tlKwuhc6X0No_N-C4A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/DTQZKYh_JKY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/7143106101967239389/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/03/linq-xsd-leyendo-xml-con-tipos.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/7143106101967239389?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/7143106101967239389?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/DTQZKYh_JKY/linq-xsd-leyendo-xml-con-tipos.html" title="Linq a XSD: leyendo xml con tipos" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/03/linq-xsd-leyendo-xml-con-tipos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMCRX8-fSp7ImA9WhZQE08.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-2594729289609335566</id><published>2011-02-25T15:07:00.000-08:00</published><updated>2011-04-20T10:27:44.155-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-20T10:27:44.155-07:00</app:edited><title>Creando DataSets tipeados a partir de cualquier XML</title><content type="html">Un &lt;b&gt;DataSet tipeado&lt;/b&gt; es muy útil ya que nos permite acceder a los datos del &lt;b&gt;DataSet&lt;/b&gt; por medio de &lt;b&gt;tipos fuertes&lt;/b&gt; usando los nombres de las columnas y con &lt;b&gt;comprobación de parte del compilador&lt;/b&gt;.&lt;br /&gt;
La forma de crear un &lt;b&gt;DataSet&lt;/b&gt; de este tipo es con el &lt;b&gt;editor de DataSets&lt;/b&gt; que es en realidad un &lt;b&gt;editor de esquemas xml&lt;/b&gt;.&lt;br /&gt;
Una propiedad del &lt;b&gt;xml&lt;/b&gt; es que se puede inferir su esquema prográmaticamente y usar el resultado para crear un el &lt;b&gt;DataSet&lt;/b&gt; tipeado, esto se hace leyendo el &lt;b&gt;xml&lt;/b&gt; en un &lt;b&gt;DataSet&lt;/b&gt; sin tipos y usando el método &lt;b&gt;WriteXmlSchema&lt;/b&gt; del &lt;b&gt;DataSet&lt;/b&gt; para escribir el esquema en un archivo, se incluye el archivo en el proyecto en que se desea usarlo y al abrirlo &lt;b&gt;Visual Studio&lt;/b&gt; crea automáticamente el código y los archivos de soporte necesarios para el &lt;b&gt;DataSet tipeado&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Aquí esta el código para crear el Dataset.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;DataSet schemaCreator = &lt;span class="kwrd"&gt;new&lt;/span&gt; DataSet();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;schemaCreator.ReadXml(&lt;span class="str"&gt;"peliculas.xml"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;schemaCreator.WriteXmlSchema(&lt;span class="str"&gt;"peliculas.xsd"&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Por ejemplo para el siguiente XML.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Peliculas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mazinger&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Titulo&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Jackie Chan&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Director&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1975-03-19T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Estrenado&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;John Wayne&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nombre&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1915-10-23T00:00:00&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Nacimiento&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Mazinger&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombrePelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Estrella&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NombreRol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Rol&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Roles&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actor&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Actores&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Pelicula&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Peliculas&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Nos genera este esquema&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-0OPTCEWqzHs/TWg1MW3_EII/AAAAAAAAADg/5iY9ipqsWmk/s1600/peliculas.xsd.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="106" src="http://4.bp.blogspot.com/-0OPTCEWqzHs/TWg1MW3_EII/AAAAAAAAADg/5iY9ipqsWmk/s320/peliculas.xsd.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Todo esto nos permite usar los métodos&amp;nbsp; &lt;b&gt;ReadXml&lt;/b&gt; y &lt;b&gt;WriteXml&lt;/b&gt; del &lt;b&gt;DataSet&lt;/b&gt; para cargar el y guardar el contenido &lt;b&gt;xml&lt;/b&gt; y usar el mismo de una forma muy similar a una base de datos, también podemos usar &lt;b&gt;Linq&lt;/b&gt; contra el &lt;b&gt;DataSet&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Claro que también hay herramientas que nos permiten obtener el &lt;b&gt;esquema del xml&lt;/b&gt; sin escribir código, una de ellas es &lt;a href="http://diaadiaprogramando.blogspot.com/2011/02/visor-de-xml-xmlviewer.html"&gt;&lt;b&gt;XMLViewer&lt;/b&gt;&lt;/a&gt;, que es una utilidad para ver el contenido de archivos &lt;b&gt;xml&lt;/b&gt; en forma tabular y también obtiene el esquema del archivo, también la herramienta de linea de comandos &lt;b&gt;xsd&lt;/b&gt; que se incluye con el &lt;b&gt;SDK de .Net Framework&lt;/b&gt; nos sirve para obtener el &lt;b&gt;esquema&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre el uso de &lt;b&gt;XML&lt;/b&gt; en &lt;b&gt;.Net Framework&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/04/lista-de-articulos-acerca-del-uso-de.html"&gt;&lt;b&gt;Lista de artículos acerca del uso de XML en .Net Framework&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-2594729289609335566?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KAh4-0MQjBnmZVlenDOQ1q7Kn08/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KAh4-0MQjBnmZVlenDOQ1q7Kn08/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KAh4-0MQjBnmZVlenDOQ1q7Kn08/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KAh4-0MQjBnmZVlenDOQ1q7Kn08/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/tOViayfkiyM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/2594729289609335566/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/creando-datasets-tipeados-partir-de.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/2594729289609335566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/2594729289609335566?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/tOViayfkiyM/creando-datasets-tipeados-partir-de.html" title="Creando DataSets tipeados a partir de cualquier XML" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-0OPTCEWqzHs/TWg1MW3_EII/AAAAAAAAADg/5iY9ipqsWmk/s72-c/peliculas.xsd.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/creando-datasets-tipeados-partir-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cNQ387eyp7ImA9Wx9UFUk.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-324320225304927716</id><published>2011-02-12T11:59:00.000-08:00</published><updated>2011-02-12T12:04:52.103-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-12T12:04:52.103-08:00</app:edited><title>Que es LINQ</title><content type="html">&lt;b&gt;Linq&lt;/b&gt; es el acrónimo en ingles para &lt;b&gt;Language-Integrated Query&lt;/b&gt; que significa &lt;b&gt;Lenguaje Integrado de Consulta&lt;/b&gt; y es un subconjunto agregado a los &lt;b&gt;lenguajes de .Net&lt;/b&gt; para realizar búsquedas&amp;nbsp; y otras operaciones sobre conjuntos de datos, esto es: el mismo lenguaje de tu preferencia puede realizar operaciones sobre conjuntos de datos proporcionándote verificación por parte del compilador,&amp;nbsp; Intelisense y verificación de tipos sobre las consultas, la sintaxis es muy parecida a &lt;b&gt;SQL&lt;/b&gt; con la ventajas antes mencionadas debido a que no se usan con cadenas como en &lt;b&gt;SQL&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Linq&lt;/b&gt; puede realizar consultas sobre diversas formas de conjuntos de datos a través de extensiones especificas al conjunto de datos que estas manejando, así existen por lo menos las siguientes extensiones provenientes de &lt;b&gt;Microsoft&lt;/b&gt; y otras fuentes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Linq a objetos&lt;/b&gt;: permite manejar consultas a los tipos básicos de &lt;b&gt;.Net&lt;/b&gt; como listas y arreglos y sobre clases ya sea del sistema o propias.&lt;br /&gt;
&lt;b&gt;Linq a DataSets&lt;/b&gt;: las consultas se hacen sobre los componentes de un &lt;b&gt;DataSet&lt;/b&gt; ya sea normal o tipeado.&lt;br /&gt;
&lt;b&gt;Linq a SQL&lt;/b&gt;: las consultas se realizan sobre la base de datos &lt;b&gt;SQL Server&lt;/b&gt; con todas las ventajas antes mencionadas.&lt;br /&gt;
&lt;b&gt;DBLinq&lt;/b&gt;: es un proyecto independiente que es similar a &lt;b&gt;Linq a SQL&lt;/b&gt; con la ventaja de que podemos usar bases de datos diferentes a &lt;b&gt;SQL Server&lt;/b&gt; y de hecho podemos cambiar de tipo de base de datos con solo modificar la cadena de conexión.&lt;br /&gt;
&lt;b&gt;Linq a XML&lt;/b&gt;: nos permite realizar consultas en datos guardados en &lt;b&gt;XML&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Para darnos una idea rápida de la forma en que se utiliza &lt;b&gt;Linq&lt;/b&gt; tenemos los siguientes ejemplos sencillos de &lt;b&gt;Linq a datos&lt;/b&gt;.&lt;br /&gt;
Podemos consultar en un arreglo los elementos que cumplen con cierta condición (&lt;b&gt;c#&lt;/b&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt;[] strings = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt;[] { &lt;span class="str"&gt;"1"&lt;/span&gt;, &lt;span class="str"&gt;"2"&lt;/span&gt;, &lt;span class="str"&gt;"3"&lt;/span&gt;, &lt;span class="str"&gt;"2"&lt;/span&gt;, &lt;span class="str"&gt;"1"&lt;/span&gt; };&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;IEnumerable&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; two = from s &lt;span class="kwrd"&gt;in&lt;/span&gt; strings&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;                          &lt;span class="kwrd"&gt;where&lt;/span&gt; s == &lt;span class="str"&gt;"2"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;                          select s;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;Console.Out.WriteLine(&lt;span class="str"&gt;"s == 2, count{0}"&lt;/span&gt;, two.Count());&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
el mismo código en &lt;b&gt;Visual Basic&lt;/b&gt; es prácticamente idéntico:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; strings() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;() {&lt;span class="str"&gt;"1"&lt;/span&gt;, &lt;span class="str"&gt;"2"&lt;/span&gt;, &lt;span class="str"&gt;"3"&lt;/span&gt;, &lt;span class="str"&gt;"2"&lt;/span&gt;, &lt;span class="str"&gt;"1"&lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; two &lt;span class="kwrd"&gt;As&lt;/span&gt; IEnumerable(Of &lt;span class="kwrd"&gt;String&lt;/span&gt;) = From s &lt;span class="kwrd"&gt;In&lt;/span&gt; strings _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;   Where s = &lt;span class="str"&gt;"2"&lt;/span&gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;   &lt;span class="kwrd"&gt;Select&lt;/span&gt; s&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;Console.Out.WriteLine(&lt;span class="str"&gt;"s == 2, count{0}"&lt;/span&gt;, two.Count())&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
El resultado de la consulta es un &lt;b&gt;IEnumerable&lt;/b&gt; y tenemos que recorrerlo de alguna forma para obtener resultados, en el ejemplo el método &lt;b&gt;Count&lt;/b&gt; (que es un método de extensión) recorre el resultado de la consulta y nos entrega la cuenta de los elementos que cumplieron con las condiciones.&lt;br /&gt;
&lt;br /&gt;
También podemos consultar más de un conjunto de datos a la vez (&lt;b&gt;c#&lt;/b&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;int&lt;/span&gt;[] integers = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[] { 1234, 754, 309, 233 };&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;var query = from i &lt;span class="kwrd"&gt;in&lt;/span&gt; integers&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;            from s &lt;span class="kwrd"&gt;in&lt;/span&gt; strings&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;            &lt;span class="kwrd"&gt;where&lt;/span&gt; i.ToString().Contains(s)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            select &lt;span class="kwrd"&gt;new&lt;/span&gt; { s, i };&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;foreach&lt;/span&gt;(var i &lt;span class="kwrd"&gt;in&lt;/span&gt; query) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    Console.Out.WriteLine(&lt;span class="str"&gt;"{0}, {1}"&lt;/span&gt;, i.s, i.i);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
en &lt;b&gt;Visual Basic&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; integers() &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;() {1234, 754, 309, 233}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; query = From i &lt;span class="kwrd"&gt;In&lt;/span&gt; integers _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;   From s &lt;span class="kwrd"&gt;In&lt;/span&gt; strings _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;   Where i.ToString().Contains(s) _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;   &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;With&lt;/span&gt; {s, i}&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; i &lt;span class="kwrd"&gt;In&lt;/span&gt; query&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    Console.Out.WriteLine(&lt;span class="str"&gt;"{0}, {1}"&lt;/span&gt;, i.s, i.i)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;Next&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
En este caso usamos una consulta que une dos conjuntos y después se recorre la consulta para obtener los resultados.&lt;br /&gt;
Para aprender más sobre &lt;b&gt;Linq&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-linq.html"&gt;&lt;b&gt;Lista de artículos acerca de Linq&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-324320225304927716?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qITYPaAJNxoaRc36e2EbVhTDVYE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qITYPaAJNxoaRc36e2EbVhTDVYE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qITYPaAJNxoaRc36e2EbVhTDVYE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qITYPaAJNxoaRc36e2EbVhTDVYE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/i4qLku3LO90" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/324320225304927716/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/que-es-linq.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/324320225304927716?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/324320225304927716?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/i4qLku3LO90/que-es-linq.html" title="Que es LINQ" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/que-es-linq.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIMSHkzeSp7ImA9WhZQEk4.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-5907223931157450679</id><published>2011-02-11T13:53:00.000-08:00</published><updated>2011-04-19T11:43:09.781-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-19T11:43:09.781-07:00</app:edited><title>Lista de artículos acerca de Linq</title><content type="html">Esta es una lista de artículos acerca de &lt;b&gt;Linq&lt;/b&gt; disponibles en este blog:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/que-es-linq.html"&gt;&lt;b&gt;Que es LINQ&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/02/leyendo-y-escribiendo-xml-con-linq-en.html"&gt;Leyendo y Escribiendo XML con Linq en Visual Basic&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2010/02/leyendo-y-escribiendo-xml-con-linq.html"&gt;Leyendo y Escribiendo XML con Linq en c#&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/03/linq-xsd-leyendo-xml-con-tipos.html"&gt;Linq a XSD: leyendo xml con tipos&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/03/instalar-linq-xsd.html"&gt;Instalar Linq a XSD&amp;nbsp;&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/04/usar-o-no-dblinq.html"&gt;Usar o no DBLinq&lt;/a&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-5907223931157450679?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8hZvwU58R8Q833enKer5HFIcjn4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8hZvwU58R8Q833enKer5HFIcjn4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8hZvwU58R8Q833enKer5HFIcjn4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8hZvwU58R8Q833enKer5HFIcjn4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/bJEaLPWIYkc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/5907223931157450679/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/lista-de-articulos-acerca-de-linq.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/5907223931157450679?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/5907223931157450679?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/bJEaLPWIYkc/lista-de-articulos-acerca-de-linq.html" title="Lista de artículos acerca de Linq" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/lista-de-articulos-acerca-de-linq.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8NQ3oyfCp7ImA9WhZSGUk.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-328058559213814658</id><published>2011-02-09T14:27:00.000-08:00</published><updated>2011-04-04T12:21:32.494-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-04T12:21:32.494-07:00</app:edited><title>Leyendo y Escribiendo XML con Linq en Visual Basic</title><content type="html">Escribir &lt;b&gt;xml&lt;/b&gt; en &lt;b&gt;Visual Basic&lt;/b&gt; es tan fácil como se dice simplemente se escribe el &lt;b&gt;xml&lt;/b&gt; tal cual en el &lt;b&gt;código de Visual Basic&lt;/b&gt; y el compilador convierte el árbol completo en una instancia de la &lt;b&gt;clase XElement&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt;  xml &lt;span class="kwrd"&gt;As&lt;/span&gt; XElement =  &amp;lt;Root&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &amp;lt;Elemento /&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;lt;Root&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Si necesitamos incluir en el &lt;b&gt;xml&lt;/b&gt; el valor de una variable o cualquier código podemos usar los tags &lt;b&gt;&amp;lt;%= &amp;gt;&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; a &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="str"&gt;"Hola"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt;  xml &lt;span class="kwrd"&gt;As&lt;/span&gt; XElement =  &amp;lt;Root&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &amp;lt;Elemento&amp;gt;&amp;lt;%= a %&amp;gt;&amp;lt;/Elemento&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;lt;Root&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Escribir xml también es sencillo pero no tan directo.&lt;br /&gt;
En este ejemplo uso &lt;b&gt;Linq&lt;/b&gt; para crear &lt;b&gt;XML&lt;/b&gt; desde un árbol de objetos y después poder leer de nuevo el &lt;b&gt;XML&lt;/b&gt; con &lt;b&gt;Linq&lt;/b&gt; y crear de nuevo los objetos.&lt;br /&gt;
Por supuesto para correr los ejemplos hay que crear los tipos de datos necesarios, todas las colecciones son de tipo &lt;b&gt;List(Of T)&lt;/b&gt;&lt;br /&gt;
Escribir (&lt;b&gt;Linq a XML&lt;/b&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; peliculas &lt;span class="kwrd"&gt;As&lt;/span&gt; List(Of Pelicula)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; source &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; PeliculaTA&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;peliculas = source.Retrieve()&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; xmlArch &lt;span class="kwrd"&gt;As&lt;/span&gt; XElement = _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt; &amp;lt;Peliculas&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;     &amp;lt;%= From m &lt;span class="kwrd"&gt;In&lt;/span&gt; peliculas _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;         &lt;span class="kwrd"&gt;Select&lt;/span&gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;         &amp;lt;Pelicula&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;             &amp;lt;Titulo&amp;gt;&amp;lt;%= m.Titulo %&amp;gt;&amp;lt;/Titulo&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;             &amp;lt;Director&amp;gt;&amp;lt;%= m.Director %&amp;gt;&amp;lt;/Director&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;             &amp;lt;Estrenado&amp;gt;&amp;lt;%= m.Estrenado %&amp;gt;&amp;lt;/Estrenado&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;             &amp;lt;Actores&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                 &amp;lt;%= From a &lt;span class="kwrd"&gt;In&lt;/span&gt; m.Actores _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                     &lt;span class="kwrd"&gt;Select&lt;/span&gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                     &amp;lt;Actor&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                         &amp;lt;Nombre&amp;gt;&amp;lt;%= a.Nombre %&amp;gt;&amp;lt;/Nombre&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                         &amp;lt;Nacimiento&amp;gt;&amp;lt;%= a.Nacimiento %&amp;gt;&amp;lt;/Nacimiento&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;                         &amp;lt;Roles&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;                             &amp;lt;%= From r &lt;span class="kwrd"&gt;In&lt;/span&gt; a.Roles _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                                 &lt;span class="kwrd"&gt;Select&lt;/span&gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                                 &amp;lt;Rol&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                                     &amp;lt;NombrePelicula&amp;gt;&amp;lt;%= r.Pelicula %&amp;gt;&amp;lt;/NombrePelicula&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                                     &amp;lt;NombreRol&amp;gt;&amp;lt;%= r.NombreRol %&amp;gt;&amp;lt;/NombreRol&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                                 &amp;lt;/Rol&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                             %&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;                         &amp;lt;/Roles&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;                     &amp;lt;/Actor&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;                 %&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;             &amp;lt;/Actores&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;         &amp;lt;/Pelicula&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;     %&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt; &amp;lt;/Peliculas&amp;gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;File.WriteAllText(&lt;span class="str"&gt;"peliculas.xml"&lt;/span&gt;, xmlArch.ToString())&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Leer (&lt;b&gt;XML a Linq&lt;/b&gt;):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; xmlArch &lt;span class="kwrd"&gt;As&lt;/span&gt; XElement = XElement.Load(&lt;span class="str"&gt;"peliculas.xml"&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; peliculas = From m &lt;span class="kwrd"&gt;In&lt;/span&gt; xmlArch...&amp;lt;Pelicula&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Pelicula &lt;span class="kwrd"&gt;With&lt;/span&gt; { _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;  .Titulo = m.&amp;lt;Titulo&amp;gt;.Value _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;  , .Director = m.&amp;lt;Director&amp;gt;.Value _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;  , .Estrenado = m.&amp;lt;Estrenado&amp;gt;.Value _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;  , .Actores = (From c &lt;span class="kwrd"&gt;In&lt;/span&gt; m...&amp;lt;Actor&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;  &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Actor &lt;span class="kwrd"&gt;With&lt;/span&gt; { _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt; .Nombre = c.&amp;lt;Nombre&amp;gt;.Value _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt; , .Nacimiento = c.&amp;lt;Nacimiento&amp;gt;.Value _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt; , .Roles = (From r &lt;span class="kwrd"&gt;In&lt;/span&gt; c...&amp;lt;Rol&amp;gt; _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; Rol &lt;span class="kwrd"&gt;With&lt;/span&gt; { _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt; .Pelicula = r.&amp;lt;NombrePelicula&amp;gt;.Value _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt; , .NombreRol = r.&amp;lt;NombreRol&amp;gt;.Value _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt; }).ToList() _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt; }).ToList() _&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
El resultado de el último ejemplo es un &lt;b&gt;Enumerable(Of Pelicula)&lt;/b&gt; el cual hay que recorrer por ejemplo con &lt;b&gt;For Each&lt;/b&gt; para obtener resultados.&lt;br /&gt;
&lt;br /&gt;
Para aprender mas sobre Linq visita:&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-linq.html"&gt;Lista de artículos acerca de Linq&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre el uso de &lt;b&gt;XML&lt;/b&gt; en &lt;b&gt;.Net Framework&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/04/lista-de-articulos-acerca-del-uso-de.html"&gt;&lt;b&gt;Lista de artículos acerca del uso de XML en .Net Framework&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-328058559213814658?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PbhyReVfFopTLndtQ0mqtvibxfE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PbhyReVfFopTLndtQ0mqtvibxfE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PbhyReVfFopTLndtQ0mqtvibxfE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PbhyReVfFopTLndtQ0mqtvibxfE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/ZuhVwDj9YE4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/328058559213814658/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/leyendo-y-escribiendo-xml-con-linq-en.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/328058559213814658?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/328058559213814658?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/ZuhVwDj9YE4/leyendo-y-escribiendo-xml-con-linq-en.html" title="Leyendo y Escribiendo XML con Linq en Visual Basic" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/leyendo-y-escribiendo-xml-con-linq-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYAQHc7fCp7ImA9Wx9VGUk.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-8095454931572994016</id><published>2011-02-05T13:09:00.000-08:00</published><updated>2011-02-05T13:09:01.904-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-05T13:09:01.904-08:00</app:edited><title>Tips y errores del control ListView</title><content type="html">Te aparece el siguiente error al cargar una&amp;nbsp; página con un &lt;b&gt;control ListView&lt;/b&gt;:&lt;br /&gt;
&lt;b&gt;capacity was less than the current size.&lt;br /&gt;
Parameter name: value&lt;/b&gt;&lt;br /&gt;
Esto ocurre cuando tienes un &lt;b&gt;ListView&lt;/b&gt; enlazado a un &lt;b&gt;ObjectDataSource&lt;/b&gt; con la propiedad &lt;b&gt;EnablePaging&lt;/b&gt; en verdadero y el método establecido en &lt;b&gt;SelectCountMethod&lt;/b&gt; devuelve un &lt;b&gt;tipo de datos long&lt;/b&gt;, para corregir este error tienes que cambiar el método &lt;b&gt;SelectCountMethod&lt;/b&gt; para que regrese un &lt;b&gt;int&lt;/b&gt;.&lt;br /&gt;
Es un error un poco rebuscado pero puede suceder, afortunadamente el tipo &lt;b&gt;int&lt;/b&gt; puede manejar la gran mayoría de los usos y en todo caso quien va a paginar tantos datos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-8095454931572994016?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uveF3tnberBIX5Pz9BT0zcmTE2U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uveF3tnberBIX5Pz9BT0zcmTE2U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uveF3tnberBIX5Pz9BT0zcmTE2U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uveF3tnberBIX5Pz9BT0zcmTE2U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/9N1sG-yIYiI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/8095454931572994016/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/tips-y-errores-del-control-listview.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8095454931572994016?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8095454931572994016?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/9N1sG-yIYiI/tips-y-errores-del-control-listview.html" title="Tips y errores del control ListView" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/tips-y-errores-del-control-listview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAFRH07fSp7ImA9WhZUFEo.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-8807842909969041200</id><published>2011-02-04T20:24:00.000-08:00</published><updated>2011-06-07T13:15:15.305-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-07T13:15:15.305-07:00</app:edited><title>Lista de artículos acerca de pruebas unitarias con .Net Framework</title><content type="html">Esta es una lista de los artículos de este blog que tratan acerca de &lt;b&gt;pruebas unitarias con .Net Framework:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2011/02/pruebas-unitarias-con-nunit.html"&gt;Pruebas unitarias con Nunit&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;a href="http://solonetframework.blogspot.com/2010/03/pruebas-unitarias-con-visual-studio.html"&gt;Pruebas unitarias con Visual Studio&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/03/integrar-nunit-visual-studio.html"&gt;&lt;b&gt;Integrar NUnit a Visual Studio&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/03/cobertura-de-codigo-code-coverage-con.html"&gt;&lt;b&gt;Cobertura de código (Code Coverage) con pruebas unitarias de Visual Studio&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/05/nunit-modelo-basado-en-restricciones.html"&gt;&lt;b&gt;Nunit - modelo basado en restricciones (constraint) &lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-8807842909969041200?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3fS4z8PgKs3BwRNNfz2YzqiDbvg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3fS4z8PgKs3BwRNNfz2YzqiDbvg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3fS4z8PgKs3BwRNNfz2YzqiDbvg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3fS4z8PgKs3BwRNNfz2YzqiDbvg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/v8LPH78zS08" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/8807842909969041200/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/lista-de-articulos-acerca-de-pruebas.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8807842909969041200?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8807842909969041200?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/v8LPH78zS08/lista-de-articulos-acerca-de-pruebas.html" title="Lista de artículos acerca de pruebas unitarias con .Net Framework" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/lista-de-articulos-acerca-de-pruebas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGRnw4fip7ImA9WhZTGUw.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-5745425466440342048</id><published>2011-02-03T13:10:00.000-08:00</published><updated>2011-03-23T14:37:07.236-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-23T14:37:07.236-07:00</app:edited><title>Pruebas unitarias con Nunit</title><content type="html">Las &lt;b&gt;pruebas unitarias&lt;/b&gt; son muy importantes en el proceso de desarrollo de una aplicación, para realizarlas podemos usar las herramientas incluidas en &lt;b&gt;Visual Studio&lt;/b&gt;, pero no todas las versiones tienen esta característica, y por supuesto esta la gente que no usa &lt;b&gt;Visual Studio&lt;/b&gt;, Aquí es donde entra &lt;b&gt;Nunit&lt;/b&gt; que es un &lt;b&gt;framework para realizar pruebas unitarias&lt;/b&gt; que no depende en lo absoluto de &lt;b&gt;Visual Studio&lt;/b&gt;.&lt;br /&gt;
&lt;b&gt;Nunit&lt;/b&gt; es la version para &lt;b&gt;Net Framework&lt;/b&gt; del original &lt;b&gt;Junit&lt;/b&gt; que es la versión para &lt;b&gt;Java&lt;/b&gt; y se puede obtener de la &lt;b&gt;&lt;a href="http://www.nunit.org/"&gt;pagina oficial de Nunit&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;
Una vez instalado creamos de preferencia un proyecto separado para nuestras pruebas este proyecto puede&amp;nbsp; ser preferentemente de tipo librería de clases ya que toda la interacción con nuestras pruebas se hace usando el ejecutable de &lt;b&gt;Nunit&lt;/b&gt;, A este proyecto añadimos una referencia a la dll &lt;b&gt;nunit .framework.dll&lt;/b&gt; que se encuentra en el directorio en que se instalo &lt;b&gt;Nunit&lt;/b&gt; (no en el &lt;b&gt;GAC&lt;/b&gt;), también añadimos una referencia al proyecto que vamos a probar y empezamos a crear las pruebas.&lt;br /&gt;
La forma básica en que se crea una prueba es creando una clase que tiene aplicado el atributo &lt;b&gt;TestFixture&lt;/b&gt; a esta clase le añadimos métodos con el atributo &lt;b&gt;Test&lt;/b&gt; aplicado estos métodos son los que utilizaremos para crear las pruebas por supuesto podemos añadir también clases y métodos sin los atributos mencionados que podrían ser para ayudar en el proceso de prueba.&lt;br /&gt;
En nuestros métodos de prueba lo que haremos es usar los &lt;b&gt;métodos de Nunit&lt;/b&gt; para comprobar que nuestras clases den los resultados esperados, el mas comúnmente usado es el metodo &lt;b&gt;AreEqual&lt;/b&gt; de la clase &lt;b&gt;Assert&lt;/b&gt; de &lt;b&gt;Nunit&lt;/b&gt; que compara una variable contra un valor esperado.&lt;br /&gt;
Aquí esta el ejemplo, lo primero que les muestro es la clase que vamos a probar:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; Prueba.Data {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; User {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Name { get; set; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Password { get; set; }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; User(&lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;span class="kwrd"&gt;string&lt;/span&gt; password) {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;            Name = name;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;            Password = password;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Y después nuestra clase de prueba:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; NUnit.Framework;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; Prueba.Data;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; NunitTests {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    [TestFixture]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UserTest {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        [Test]&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ConstructorTest() {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;            User user = &lt;span class="kwrd"&gt;new&lt;/span&gt; User(&lt;span class="str"&gt;"Pedro"&lt;/span&gt;, &lt;span class="str"&gt;"secreto"&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            Assert.AreEqual(&lt;span class="str"&gt;"Pedro"&lt;/span&gt;, user.Name);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            Assert.AreEqual(&lt;span class="str"&gt;"secreto"&lt;/span&gt;, user.Password);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Una vez que tenemos listas las pruebas compilamos el proyecto y abrimos &lt;b&gt;el ejecutable de Nunit&lt;/b&gt; con el que se realizaran las pruebas.&lt;br /&gt;
En &lt;b&gt;Nunit&lt;/b&gt; usamos el menú &lt;b&gt;File -&amp;gt; Open Project&lt;/b&gt; y abrimos la dll que se genero al compilar el proyecto, en el panel izquierdo aparecerá un árbol que contiene todos los métodos que creamos para las pruebas en una jerarquía que sigue a la del proyecto, podemos ejecutar un solo método una rama del arbol o todas las pruebas a la vez.&lt;br /&gt;
En este caso solo tenemos una prueba presionamos el botón Run y se ejecutara el proyecto de pruebas una barra de progreso nos muestra el porcentaje de pruebas ejecutadas según se van ejecutando y el color verde nos indica que ninguna ha fallado en caso contrario cambiara a color rojo.&lt;br /&gt;
Si al final hubo errores se mostraran en el árbol y en los paneles inferiores mostrando la prueba que fallo e información acerca de el error incluyendo la posición en el código que fallo, también podemos depurar el código en la ejecución usando el depurador de &lt;b&gt;Visual Studio&lt;/b&gt; u otro depurador escogiendo la instancia de &lt;b&gt;Nunit&lt;/b&gt; como el ejecutable a depurar.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Lfh87vE_jME/TUsYdNqKs-I/AAAAAAAAADI/AZoEM3jM9e4/s1600/Nunit.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://3.bp.blogspot.com/_Lfh87vE_jME/TUsYdNqKs-I/AAAAAAAAADI/AZoEM3jM9e4/s320/Nunit.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Por supuesto &lt;b&gt;NUnit&lt;/b&gt; puede probar muchas más cosas que la igualdad de miembros, por ejemplo algo muy útil es que puede probar cuando un método manda una excepción en el momento adecuado, pero la API de &lt;b&gt;NUnit&lt;/b&gt; es muy amplia para un blog y lo mejor es que te dirijas a la &lt;a href="http://www.nunit.org/index.php?p=documentation"&gt;documentación de &lt;b&gt;NUnit&lt;/b&gt; para la última versión&lt;/a&gt; para una mejor referencia.&lt;br /&gt;
Para aprender más acerca de las &lt;b&gt;pruebas unitarias con .Net Framework&lt;/b&gt; visita:&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-acerca-de-pruebas.html"&gt;Lista de artículos acerca de pruebas unitarias con .Net Framework&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-5745425466440342048?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L2Y8AM4f6iHLSYNNql8T-sAj4l8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L2Y8AM4f6iHLSYNNql8T-sAj4l8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L2Y8AM4f6iHLSYNNql8T-sAj4l8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L2Y8AM4f6iHLSYNNql8T-sAj4l8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/jb6vueRmYRU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/5745425466440342048/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/pruebas-unitarias-con-nunit.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/5745425466440342048?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/5745425466440342048?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/jb6vueRmYRU/pruebas-unitarias-con-nunit.html" title="Pruebas unitarias con Nunit" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Lfh87vE_jME/TUsYdNqKs-I/AAAAAAAAADI/AZoEM3jM9e4/s72-c/Nunit.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/pruebas-unitarias-con-nunit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08GSXc_cCp7ImA9Wx9VFkQ.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-3335646938363152301</id><published>2011-02-02T17:16:00.000-08:00</published><updated>2011-02-02T17:17:08.948-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T17:17:08.948-08:00</app:edited><title>Usando el control TemplatePagerField en un DataPager</title><content type="html">Una de las características del &lt;b&gt;control DataPager&lt;/b&gt; es que nos brinda un área donde podemos mostrar información relevante a la paginación (en realidad podemos mostrar cualquier cosa en esta área pero lo lógico es que la relacionemos con la paginación), tal como la pagina en la que estamos, el total de paginas o el numero de registro en que inicia la pagina, esto se logra añadiendo un &lt;b&gt;Field TemplatePagerField&lt;/b&gt; en el template &lt;b&gt;Fields&lt;/b&gt; del &lt;b&gt;DataPager&lt;/b&gt; y editando el &lt;b&gt;template PagerTemplate&lt;/b&gt; del control, en este template podemos poner cualquier código &lt;b&gt;Asp.Net&lt;/b&gt; y lo importante es que tenemos acceso a las propiedades del &lt;b&gt;DataPager&lt;/b&gt; con lo que podemos mostrar la información antes mencionada.&lt;br /&gt;
Aquí tenemos el ejemplo de un &lt;b&gt;DataPager&lt;/b&gt; que muestra el número de registro que se muestra y el total de paginas disponibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="csharpcode"&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:DataPager&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="DataPager1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;PagedControlID&lt;/span&gt;&lt;span class="kwrd"&gt;="ListView1"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="attr"&gt;PageSize&lt;/span&gt;&lt;span class="kwrd"&gt;="3"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Fields&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:NextPreviousPagerField&lt;/span&gt; &lt;span class="attr"&gt;ButtonType&lt;/span&gt;&lt;span class="kwrd"&gt;="Button"&lt;/span&gt; &lt;span class="attr"&gt;ShowFirstPageButton&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;            &lt;span class="attr"&gt;ShowNextPageButton&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt; &lt;span class="attr"&gt;ShowPreviousPageButton&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:NumericPagerField&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:NextPreviousPagerField&lt;/span&gt; &lt;span class="attr"&gt;ButtonType&lt;/span&gt;&lt;span class="kwrd"&gt;="Button"&lt;/span&gt; &lt;span class="attr"&gt;ShowLastPageButton&lt;/span&gt;&lt;span class="kwrd"&gt;="True"&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="attr"&gt;ShowNextPageButton&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt; &lt;span class="attr"&gt;ShowPreviousPageButton&lt;/span&gt;&lt;span class="kwrd"&gt;="False"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:TemplatePagerField&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;PagerTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;br&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="&amp;lt;%# Container.StartRowIndex  %&amp;gt;"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                &lt;span class="attr"&gt;&amp;amp;nbsp;&lt;/span&gt;-&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                    &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="&amp;lt;%# Container.StartRowIndex +  Container.PageSize %&amp;gt;"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                &lt;span class="attr"&gt;&amp;amp;nbsp;&lt;/span&gt;de&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Label&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;Text&lt;/span&gt;&lt;span class="kwrd"&gt;="&amp;lt;%# Container.TotalRowCount  %&amp;gt;"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;PagerTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:TemplatePagerField&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Fields&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:DataPager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Los propiedades del &lt;b&gt;DataPager&lt;/b&gt; relacionadas con la &lt;b&gt;paginación&lt;/b&gt; son:&lt;br /&gt;
&lt;b&gt;StartRowIndex&lt;/b&gt;: el número del primer registro mostrado&lt;br /&gt;
&lt;b&gt;PageSize&lt;/b&gt;: el total de registros mostrados en cada pagina&lt;br /&gt;
&lt;b&gt;TotalRowCount&lt;/b&gt;: el total de registros disponibles para la paginación&lt;br /&gt;
&lt;br /&gt;
Para aprender más sobre el &lt;b&gt;control DataPager&lt;/b&gt; busca en la lista de &lt;a href="http://solonetframework.blogspot.com/2011/02/lista-de-articulos-sobre-el-datapager.html"&gt;&lt;b&gt;artículos sobre el control DataPager en este blog&lt;/b&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-3335646938363152301?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_-zqtLQi9YHmUEPwKH13cleOcNI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_-zqtLQi9YHmUEPwKH13cleOcNI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_-zqtLQi9YHmUEPwKH13cleOcNI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_-zqtLQi9YHmUEPwKH13cleOcNI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/FNtyH5TFs0w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/3335646938363152301/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/usando-el-conrol-templatepagerfield-en.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/3335646938363152301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/3335646938363152301?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/FNtyH5TFs0w/usando-el-conrol-templatepagerfield-en.html" title="Usando el control TemplatePagerField en un DataPager" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/usando-el-conrol-templatepagerfield-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04ASHkzcCp7ImA9Wx9VFkQ.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-8689463089711662642</id><published>2011-02-01T14:56:00.000-08:00</published><updated>2011-02-02T17:19:09.788-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T17:19:09.788-08:00</app:edited><title>Lista de articulos sobre el DataPager</title><content type="html">Esta es una lista de artículos sobre el &lt;b&gt;control DataPager&lt;/b&gt; disponibles en este blog:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2010/02/como-funciona-el-datapager.html"&gt;Como funciona el DataPager&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2010/02/seo-con-el-control-datapager.html"&gt;SEO con el control DataPager&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://solonetframework.blogspot.com/2011/02/usando-el-conrol-templatepagerfield-en.html"&gt;Usando el control TemplatePagerField en un DataPager&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-8689463089711662642?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yWnMuaa_QD96r2c70z7T6F4IDI8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yWnMuaa_QD96r2c70z7T6F4IDI8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yWnMuaa_QD96r2c70z7T6F4IDI8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yWnMuaa_QD96r2c70z7T6F4IDI8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/PN2HFU6ZTDk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/8689463089711662642/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/02/lista-de-articulos-sobre-el-datapager.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8689463089711662642?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/8689463089711662642?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/PN2HFU6ZTDk/lista-de-articulos-sobre-el-datapager.html" title="Lista de articulos sobre el DataPager" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/02/lista-de-articulos-sobre-el-datapager.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8NRXsyfSp7ImA9Wx9VFE8.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-6829982175894380956</id><published>2011-01-30T13:58:00.000-08:00</published><updated>2011-01-30T14:01:34.595-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-30T14:01:34.595-08:00</app:edited><title>Nuevo sistema de ayuda en Visual Studio 2010</title><content type="html">Acabo de instalar el nuevo &lt;b&gt;Visual Studio 2010&lt;/b&gt; y lo primero que hice fue abrir la ayuda ya que mientras lo instalaba note que ya no se instala la &lt;b&gt;MSDN&lt;/b&gt; como en las versiones anteriores, ahora la ayuda se muestra en el navegador de Internet mostrando páginas que se cargan desde un servidor web local que inicia el &lt;b&gt;Visual Studio&lt;/b&gt;.&lt;br /&gt;
Francamente me pareció un mal cambio lo primero que note es que ya no tiene índice ahora se tiene que usar la función de búsqueda para encontrar los temas, además esta búsqueda es un poco lenta y se tiene que buscar en los temas encontrados. Al principio pensé que se mostraba esta ayuda debido a que la versión de &lt;b&gt;Visual Studio&lt;/b&gt; es la de prueba pero investigando un poco encontré que en &lt;b&gt;todas las versiones de Visual Studio 2010&lt;/b&gt; se usa este sistema nuevo.&lt;br /&gt;
Aquí esta la imagen del nuevo sistema:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_Lfh87vE_jME/TUXbb6q9F7I/AAAAAAAAADA/0IGZJALH-DQ/s1600/help1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_Lfh87vE_jME/TUXbb6q9F7I/AAAAAAAAADA/0IGZJALH-DQ/s320/help1.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Afortunadamente el equipo de la &lt;b&gt;MSDN&lt;/b&gt; lanzo un &lt;b&gt;visor de ayuda&lt;/b&gt; (&lt;b&gt;Microsoft Help Viewer Power Tool (Beta)&lt;/b&gt;) que muestra los temas desde el mismo servidor usando un programa un poco más completo que el navegador simplemente este programa esta hecho en &lt;b&gt;SilverLight&lt;/b&gt; y funciona de manera predeterminada mostrándose en el navegador por defecto, aunque tambien se puede configurar para funcionar como aplicación independiente.&lt;br /&gt;
Aquí esta la imagen funcionando sobre Firefox.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_Lfh87vE_jME/TUXdM3wekrI/AAAAAAAAADE/WB0uaeTNXJg/s1600/help2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_Lfh87vE_jME/TUXdM3wekrI/AAAAAAAAADE/WB0uaeTNXJg/s320/help2.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Esta opción esta mucho mejor incluye un índice y se acerca un poco a la versión anterior de la &lt;b&gt;MSDN&lt;/b&gt; pero francamente todavía le falta mucho para igualarla: le faltan herramientas y el índice es un poco lento.&lt;br /&gt;
Bueno si quieren probarla (esta en etapa Beta) la pueden bajar de la siguiente página:&lt;br /&gt;
&lt;a href="http://code.msdn.microsoft.com/HelpViewerPowerTool"&gt;Microsoft Help Viewer Power Tool (Beta)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-6829982175894380956?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yef0px1_oHZtT-8u9-KAkGZvI-0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yef0px1_oHZtT-8u9-KAkGZvI-0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yef0px1_oHZtT-8u9-KAkGZvI-0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yef0px1_oHZtT-8u9-KAkGZvI-0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/TH4MzDEJquc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/6829982175894380956/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2011/01/nuevo-sistema-de-ayuda-en-visual-studio.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/6829982175894380956?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/6829982175894380956?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/TH4MzDEJquc/nuevo-sistema-de-ayuda-en-visual-studio.html" title="Nuevo sistema de ayuda en Visual Studio 2010" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Lfh87vE_jME/TUXbb6q9F7I/AAAAAAAAADA/0IGZJALH-DQ/s72-c/help1.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2011/01/nuevo-sistema-de-ayuda-en-visual-studio.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIMSHs8eip7ImA9Wx5bEk4.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-4241969986500503982</id><published>2010-10-27T19:23:00.000-07:00</published><updated>2010-10-27T19:23:09.572-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-27T19:23:09.572-07:00</app:edited><title>Comprimir Web Services</title><content type="html">Llamar un web service de manera que la respuesta nos llegue comprimida es muy sencillo pero de entrada nos podemos tardar un poco en encontrar la forma de hacerlo de hacerlo por eso publico esta entrada.&lt;br /&gt;
Es muy sencillo solo tenemos que poner la propiedad EnableDecompression de nuestra instancia cliente a verdadero y listo tendremos nuestro web service comprimido (siempre y cuando la compresión este habilitada en IIS por supuesto).&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;WSInstance client = WSClient.Client();
client.EnableDecompression = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-4241969986500503982?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yUtR-Ot8SKG6-DiWzlTXymSoQvs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yUtR-Ot8SKG6-DiWzlTXymSoQvs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yUtR-Ot8SKG6-DiWzlTXymSoQvs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yUtR-Ot8SKG6-DiWzlTXymSoQvs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/AyoiyyPGTEM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/4241969986500503982/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2010/10/comprimir-web-services.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/4241969986500503982?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/4241969986500503982?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/AyoiyyPGTEM/comprimir-web-services.html" title="Comprimir Web Services" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2010/10/comprimir-web-services.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QDRHo4cSp7ImA9Wx5XEUo.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-5869561645650632897</id><published>2010-09-10T20:22:00.000-07:00</published><updated>2010-09-10T20:22:55.439-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-10T20:22:55.439-07:00</app:edited><title>Añadiendo controles a un control de usuario heredado de otro control de usuario</title><content type="html">Este problema me tuvo parado un rato.&lt;br /&gt;
Usando visual studio tenemos un control de usuario al que le añadimos un contenedor, por ejemplo un panel, hacemos otro control de usuario que hereda del primero y tratamos de añadir controles en el área libre del panel anterior visual studio no lo permite.&lt;br /&gt;
La solución es simple pero no muy intuitiva solo debemos marcar como publico o protegido el panel que añadimos en el control base, esto se hace en la ventana de propiedades del panel en la sección que dice diseño.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Lfh87vE_jME/TIr1_MezthI/AAAAAAAAACo/7Z9vXVTnegY/s1600/usercontrol.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Lfh87vE_jME/TIr1_MezthI/AAAAAAAAACo/7Z9vXVTnegY/s320/usercontrol.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-5869561645650632897?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qgNKwEVnSU6FDH2bj2hIoAjiryQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qgNKwEVnSU6FDH2bj2hIoAjiryQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qgNKwEVnSU6FDH2bj2hIoAjiryQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qgNKwEVnSU6FDH2bj2hIoAjiryQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/QXNKu6oMFps" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/5869561645650632897/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2010/09/anadiendo-controles-un-control-de.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/5869561645650632897?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/5869561645650632897?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/QXNKu6oMFps/anadiendo-controles-un-control-de.html" title="Añadiendo controles a un control de usuario heredado de otro control de usuario" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Lfh87vE_jME/TIr1_MezthI/AAAAAAAAACo/7Z9vXVTnegY/s72-c/usercontrol.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2010/09/anadiendo-controles-un-control-de.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEGR3w_eyp7ImA9WxFSFk4.&quot;"><id>tag:blogger.com,1999:blog-7405922360324420417.post-6052212072640238019</id><published>2010-04-18T17:50:00.000-07:00</published><updated>2010-04-18T17:57:06.243-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-18T17:57:06.243-07:00</app:edited><title>Threads en Windows.Forms usando el componente BackgroudWorker</title><content type="html">Usar threads en Windows.Forms se simplifica mucho usando el componente BackgroundWorker que nos permite llevar a cabo una tarea en el fondo sin preocuparnos de tareas como la administración del thread o el acceso a controles desde un thread diferente al del form.&lt;br /&gt;
Les presento este pequeño tutorial que nos presenta una tarea muy sencilla que llevaremos a cabo en un trhread.&lt;br /&gt;
&lt;br /&gt;
Primero que nada crearemos el formulario añadiendo los siguientes componentes:&lt;br /&gt;
&lt;br /&gt;
Un NumericUpdown llamado hasta&lt;br /&gt;
un botón llamado inicio&lt;br /&gt;
un botón llamado fin&lt;br /&gt;
un BackgroundWorker llamado thread, con las propiedades SupportCancellation y ReportProgress en verdadero&lt;br /&gt;
una ProgressBar llamado progreso&lt;br /&gt;
una etiqueta llamada status&lt;br /&gt;
&lt;br /&gt;
El formulario se vera como en la imagen:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_Lfh87vE_jME/S8ukiLQtapI/AAAAAAAAABQ/AyW3zWpDf1A/s1600/threa.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_Lfh87vE_jME/S8ukiLQtapI/AAAAAAAAABQ/AyW3zWpDf1A/s320/threa.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Lo primero que hacemos es añadir el código para comenzar la tarea como no deseamos que el usuario pueda cambiar los parámetros del mismo mientras se ejecuta deshabilitaremos los controles adecuados, también noten que pasamos un parámetro al proceso esto es necesario ya que en el thread no podemos accesar los controles del formulario o tendremos un error:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; inicio_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) {
            inicio.Enabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            fin.Enabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            hasta.Enabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            thread.RunWorkerAsync(hasta.Value);
        }&lt;/pre&gt;&lt;br /&gt;
Podemos cancelar el proceso en cualquier momento usando el método CancelAsync del BackwroundWorker:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; fin_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) {
            thread.CancelAsync();
        }&lt;/pre&gt;&lt;br /&gt;
El proceso simplemente desde cero hasta el número del NumericDown que recuperamos desde el argumento que pasamos al proceso, nos dentendremos un segundo entre cada número.&lt;br /&gt;
Para cancelar el proceso debemos verificar constantemente la propiedad CancelationPending cuando esta sea verdadera detendremos la cuenta.&lt;br /&gt;
Para reportar el progreso usamos el método ReportProgress que acepta un porcentaje entero y un argumento de tipo object en el que podemos incluir otra información relevante al progreso:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; thread_DoWork(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DoWorkEventArgs e) {
            &lt;span class="kwrd"&gt;decimal&lt;/span&gt; total = (&lt;span class="kwrd"&gt;decimal&lt;/span&gt;)e.Argument;
            &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;decimal&lt;/span&gt; i = 0; i &amp;lt; total; i++) {
                &lt;span class="kwrd"&gt;if&lt;/span&gt;(thread.CancellationPending)
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                System.Threading.Thread.Sleep(1000);
                &lt;span class="kwrd"&gt;int&lt;/span&gt; porcentaje = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)((i / total) * 100);
                thread.ReportProgress(porcentaje, porcentaje.ToString() + &lt;span class="str"&gt;"%"&lt;/span&gt;);
            }
        }&lt;/pre&gt;Para reportar el progreso usamos el evento ProgressChanged, noten el uso del argumento pasado anteriormente:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; thread_ProgressChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ProgressChangedEventArgs e) {
            progreso.Value = e.ProgressPercentage;
            status.Text = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)e.UserState;
        }&lt;/pre&gt;&lt;br /&gt;
Cuando se termina el proceso podemos rehabilitar los controles y agregar directamente una notificación:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; thread_RunWorkerCompleted(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RunWorkerCompletedEventArgs e) {
            inicio.Enabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            fin.Enabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            hasta.Enabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            status.Text += &lt;span class="str"&gt;" Terminado"&lt;/span&gt;;
        }&lt;/pre&gt;&lt;br /&gt;
Finalmente igual que deshabilitamos los controles durante el proceso nos aseguramos que no se cierre la ventana durante el mismo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Form1_FormClosing(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, FormClosingEventArgs e) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt;(thread.IsBusy) {
                MessageBox.Show(&lt;span class="str"&gt;"Deten el proceso antes de salir"&lt;/span&gt;);
                e.Cancel = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            }
        }&lt;/pre&gt;&lt;br /&gt;
A continuación esta el código completo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.ComponentModel;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Drawing;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Text;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Windows.Forms;

&lt;span class="kwrd"&gt;namespace&lt;/span&gt; ProbadorW {
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Form1 : Form {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; Form1() {
            InitializeComponent();
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; inicio_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) {
            inicio.Enabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            fin.Enabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            hasta.Enabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            thread.RunWorkerAsync(hasta.Value);
        }
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; fin_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e) {
            thread.CancelAsync();
        }
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; thread_DoWork(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, DoWorkEventArgs e) {
            &lt;span class="kwrd"&gt;decimal&lt;/span&gt; total = (&lt;span class="kwrd"&gt;decimal&lt;/span&gt;)e.Argument;
            &lt;span class="kwrd"&gt;for&lt;/span&gt;(&lt;span class="kwrd"&gt;decimal&lt;/span&gt; i = 0; i &amp;lt; total; i++) {
                &lt;span class="kwrd"&gt;if&lt;/span&gt;(thread.CancellationPending)
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                System.Threading.Thread.Sleep(1000);
                &lt;span class="kwrd"&gt;int&lt;/span&gt; porcentaje = (&lt;span class="kwrd"&gt;int&lt;/span&gt;)((i / total) * 100);
                thread.ReportProgress(porcentaje, porcentaje.ToString() + &lt;span class="str"&gt;"%"&lt;/span&gt;);
            }
        }
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; thread_ProgressChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ProgressChangedEventArgs e) {
            progreso.Value = e.ProgressPercentage;
            status.Text = (&lt;span class="kwrd"&gt;string&lt;/span&gt;)e.UserState;
        }
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; thread_RunWorkerCompleted(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RunWorkerCompletedEventArgs e) {
            inicio.Enabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            fin.Enabled = &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            hasta.Enabled = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            status.Text += &lt;span class="str"&gt;" Terminado"&lt;/span&gt;;
        }
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Form1_FormClosing(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, FormClosingEventArgs e) {
            &lt;span class="kwrd"&gt;if&lt;/span&gt;(thread.IsBusy) {
                MessageBox.Show(&lt;span class="str"&gt;"Deten el proceso antes de salir"&lt;/span&gt;);
                e.Cancel = &lt;span class="kwrd"&gt;true&lt;/span&gt;;
            }
        }
    }
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7405922360324420417-6052212072640238019?l=www.solonetframework.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CleZMB2ScMXxhsFzWSHICquBk3g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CleZMB2ScMXxhsFzWSHICquBk3g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CleZMB2ScMXxhsFzWSHICquBk3g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CleZMB2ScMXxhsFzWSHICquBk3g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/Solonet/~4/lNgIOM75B8o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.solonetframework.com/feeds/6052212072640238019/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.solonetframework.com/2010/04/threads-en-windowsforms-usando-el.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/6052212072640238019?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/7405922360324420417/posts/default/6052212072640238019?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Solonet/~3/lNgIOM75B8o/threads-en-windowsforms-usando-el.html" title="Threads en Windows.Forms usando el componente BackgroudWorker" /><author><name>Max Headroom</name><uri>http://www.blogger.com/profile/03352634911156408638</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Lfh87vE_jME/S8ukiLQtapI/AAAAAAAAABQ/AyW3zWpDf1A/s72-c/threa.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.solonetframework.com/2010/04/threads-en-windowsforms-usando-el.html</feedburner:origLink></entry></feed>

