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

 

[sourcecode language=”csharp”]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Practica.Helper.External.Models
{
public class Libros
{
public String LibroId { get; set; }
public String Autor { get; set; }
public String Titulo { get; set; }
public String Genero { get; set; }
public String Precio { get; set; }
public String Fecha_Publicacion { get; set; }
public String Descripcion { get; set; }
}
}
[/sourcecode]

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

 

[sourcecode language=”csharp”]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.Web; // Añadir
using System.Data; // Añadir
using Practica.Helper.External.Models; // Añadir

namespace Practica.Helper
{
public class XMLReader
{
public List GetLibros()
{
// Ruta del documento xml
String ruta = HttpContext.Current.Server.MapPath(«~/App_Data/Libros.xml»);
// Cargamos el documento
XDocument docxml = XDocument.Load(ruta);
// Recuperamos los datos
// Con Descendantos indicamos la raíz
var consulta = from datos in docxml.Descendants(«Libro»)
select new Libros
{
// Mapeamos los campos
// IMPORTANTE: El nombre de los Element debe corresponderse
// con el nombre de los elementos del documento
LibroId = datos.Element(«LibroId»).Value
, Autor = datos.Element(«Autor»).Value
, Titulo = datos.Element(«Titulo»).Value
, Genero = datos.Element(«Genero»).Value
, Precio = datos.Element(«Precio»).Value
, Fecha_Publicacion = datos.Element(«Fecha_Publicacion»).Value
, Descripcion = datos.Element(«Descripcion»).Value
};
// Guardamos lo que recibimos de la consulta en una lista
List libros = consulta.ToList();
return libros;
}
}
}
[/sourcecode]

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

 

[sourcecode language=”csharp”]
@{
ViewBag.Title = «Index»;
}

@using Practica.Helper.External.Models;
@model List

Lista de libros utilizando XML

@foreach (var item in Model)
{}

Id Título Autor Género Precio
@Html.DisplayFor(modelItem => item.LibroId) @Html.DisplayFor(modelItem => item.Titulo) @Html.DisplayFor(modelItem => item.Autor) @Html.DisplayFor(modelItem => item.Genero) @Html.DisplayFor(modelItem => item.Precio)€

[/sourcecode]

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

[sourcecode language=”csharp”]using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Practica.Helper; // Añadir

namespace Practica_LINQtoXML_MVC.Controllers
{
public class LibrosController : Controller
{
// GET: Libros
public ActionResult Index()
{
XMLReader readXML = new XMLReader();
var datos = readXML.GetLibros();
return View(datos);
}
}
}[/sourcecode]

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

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.