En el siguiente tutorial sobre LINQ to XML con MVC vamos a ver:

  • Qué es LINQ.
  • Qué es XML.
  • Cómo leer un fichero XML con LINQ y mostrar los datos dentro de una tabla en un proyecto MVC.

¿Qué es LINQ?

LINQ o Language Integrated Query son un conjunto de herramientas que permiten realizar consultas a distintas fuentes de datos como pueden ser bases de datos, xml, etc…

¿Qué es XML?

XML o Extensible Markup Language es un lenguaje que permite almacenar datos de manera legible. A grandes rasgos, los documentos XML están formados por el prólogo donde se indica que el documento es de tipo XML y por el cuerpo, el cual parte de un elemento raíz y engloba al resto de elementos y atributos.

Práctica: leer un fichero XML con LINQ y mostrar los datos en MVC

Antes de empezar vamos a guardarnos lo siguiente en un archivo con el siguiente nombre y extensión: Libros.xml:

<?xml version="1.0"?>
<Catalogo>
  <Libro>
    <LibroId>bk101</LibroId>
    <Autor>Gambardella, Matthew</Autor>
    <Titulo>XML Developer's Guide</Titulo>
    <Genero>Computer</Genero>
    <Precio>44.95</Precio>
    <Fecha_Publicacion>2000-10-01</Fecha_Publicacion>
    <Descripcion>
      An in-depth look at creating applications
      with XML.
    </Descripcion>
  </Libro>
  <Libro>
    <LibroId>bk102</LibroId>
    <Autor>Ralls, Kim</Autor>
    <Titulo>Midnight Rain</Titulo>
    <Genero>Fantasy</Genero>
    <Precio>5.95</Precio>
    <Fecha_Publicacion>2000-12-16</Fecha_Publicacion>
    <Descripcion>
      A former architect battles corporate zombies,
      an evil sorceress, and her own childhood to become queen
      of the world.
    </Descripcion>
  </Libro>
</Catalogo>

 

En primer lugar vamos a crearnos el proyecto. File > New > Project > ASP.NET Web Application y le damos el nombre que queramos, en mi caso Practica_LINQtoXML_MVC.

ASPNET_Web_Application
Click para ampliar

 

Pulsamos OK y en la siguiente ventana seleccionamos Empty y marcamos el tick para añadir las referencias para MVC.

Template
Click para ampliar

 

Pulsamos OK y se nos creará el proyecto.

Damos click derecho sobre la carpeta App_Data > Add > Existing item y buscamos el documento XML que guardamos al principio del tutorial.

Lo siguiente que haremos será crearnos una librería de clases dentro de la solución. Para ello botón derecho sobre la solución > Add > New Project > Buscamos Class Library y la llamamos Practica.Helper.

ClassLibrary
Click para ampliar

 

Se nos creará una clase que renombraremos con el nombre de XMLReader.cs.

XMLReader
Click para ampliar

 

Dentro de nuestra librería de clases creamos una carpeta External.Models y hacemos click derecho sobre ella > Add > Class, y la llamamos Libros.cs. Escribimos el siguiente código:

Libroscs
Click para ampliar

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Practica.Helper.External.Models
  8. {
  9. public class Libros
  10. {
  11. public String LibroId { get; set; }
  12. public String Autor { get; set; }
  13. public String Titulo { get; set; }
  14. public String Genero { get; set; }
  15. public String Precio { get; set; }
  16. public String Fecha_Publicacion { get; set; }
  17. public String Descripcion { get; set; }
  18. }
  19. }

Volvemos a nuestro XMLReader. Aquí vamos a cargar nuestro documento XML, a mapearlo y a guardar los objetos de tipo Libros en una lista. Para ello escribimos el siguiente código:

XMLReaderCompleto
Click para ampliar

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Xml.Linq;
  7. using System.Web; // Añadir
  8. using System.Data; // Añadir
  9. using Practica.Helper.External.Models; // Añadir
  10.  
  11. namespace Practica.Helper
  12. {
  13. public class XMLReader
  14. {
  15. public List GetLibros()
  16. {
  17. // Ruta del documento xml
  18. String ruta = HttpContext.Current.Server.MapPath("~/App_Data/Libros.xml");
  19. // Cargamos el documento
  20. XDocument docxml = XDocument.Load(ruta);
  21. // Recuperamos los datos
  22. // Con Descendantos indicamos la raíz
  23. var consulta = from datos in docxml.Descendants("Libro")
  24. select new Libros
  25. {
  26. // Mapeamos los campos
  27. // IMPORTANTE: El nombre de los Element debe corresponderse
  28. // con el nombre de los elementos del documento
  29. LibroId = datos.Element("LibroId").Value
  30. , Autor = datos.Element("Autor").Value
  31. , Titulo = datos.Element("Titulo").Value
  32. , Genero = datos.Element("Genero").Value
  33. , Precio = datos.Element("Precio").Value
  34. , Fecha_Publicacion = datos.Element("Fecha_Publicacion").Value
  35. , Descripcion = datos.Element("Descripcion").Value
  36. };
  37. // Guardamos lo que recibimos de la consulta en una lista
  38. List libros = consulta.ToList();
  39. return libros;
  40. }
  41. }
  42. }

Ahora que tenemos la librería hecha vamos a utilizarla en nuestro proyecto Practica_LINQtoXML_MVC. Para ello primero tenemos que referenciarla. Hacemos click derecho sobre References > Add Reference > Solution y seleccionamos Practica.Helper.

ReferenciaLibreria
Click para ampliar

 

Pulsamos Ctrl+Shift+B para compilar la solución.

Ahora vamos a añadir nuestro controlador para la vista. Damos click derecho sobre la carpeta Controllers > Add > Controller y elegimos MVC 5 Controller – Empty.

LibrosController
Click para ampliar

 

Le ponemos el nombre LibrosController.

Ahora que tenemos el controlador vamos a generar la vista asociada a él. Para ello le damos click derecho sobre Index  > Add View y dejamos todo por defecto y le damos a Add.

NuevaVista
Click para ampliar

 

Se nos habrá creado, dentro de la carpeta Views de nuestra solución, una carpeta Libros y dentro un Index.cshtml.

En Index.cshtml determinamos de qué forma vamos a mostrar los datos. En este caso vamos a hacer una tabla que rellenaremos con el id, título, autor, género y precio de los libros de nuestro XML. Aquí es importante añadir el @model para poder acceder a las propiedades de nuestro objeto Libros como veremos debajo.

Indexcshtml
Click para ampliar

 

  1. @{
  2. ViewBag.Title = "Index";
  3. }
  4.  
  5. @using Practica.Helper.External.Models;
  6. @model List
  7. <h2>Lista de libros utilizando XML</h2>
  8. @foreach (var item in Model)
  9. {}
  10. <table class="table table-hover">
  11. <tbody>
  12. <tr>
  13. <th>Id</th>
  14. <th>Título</th>
  15. <th>Autor</th>
  16. <th>Género</th>
  17. <th>Precio</th>
  18. </tr>
  19. <tr>
  20. <td>@Html.DisplayFor(modelItem =&gt; item.LibroId)</td>
  21. <td>@Html.DisplayFor(modelItem =&gt; item.Titulo)</td>
  22. <td>@Html.DisplayFor(modelItem =&gt; item.Autor)</td>
  23. <td>@Html.DisplayFor(modelItem =&gt; item.Genero)</td>
  24. <td>@Html.DisplayFor(modelItem =&gt; item.Precio)</td>
  25. </tr>
  26. </tbody>
  27. </table>

Volvemos a nuestro LibrosController.cs y añadimos el siguiente código para que nos mande los datos a la vista y así podamos visualizarlos.

LibrosController_relleno

Click para ampliar

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using Practica.Helper; // Añadir
  7.  
  8. namespace Practica_LINQtoXML_MVC.Controllers
  9. {
  10. public class LibrosController : Controller
  11. {
  12. // GET: Libros
  13. public ActionResult Index()
  14. {
  15. XMLReader readXML = new XMLReader();
  16. var datos = readXML.GetLibros();
  17. return View(datos);
  18. }
  19. }
  20. }

De nuevo volvemos a nuestro Index.cshtml y pulsamos F5 para compilar y ver el resultado en nuestro navegador.

Resultado
Click para ampliar

 

Hasta aquí llegaría nuestro ejemplo sobre cómo leer un archivo XML con LINQ.

Si lo necesitáramos incluso podríamos leer un XML que tuviéramos por ejemplo alojado en Azure o en cualquier otro sitio haciendo unos mínimos cambios.

Espero que os haya servido de ayuda y nos vemos en siguientes post.

Un saludo.

Descripción: en el siguiente tutorial vamos a ver cómo leer datos de un archivo XML mediante LINQ y cómo mostrarlos en un proyecto MVC.
Autor: Jorge Bravo Sayago
​​Curso: ​​Microsoft MCSD Web Applications + SharePoint Apps
Centro: Tajamar
Año aca​démico: 2016-2017