Introducción
La serialización es un concepto clave en la programación que permite almacenar y recuperar datos en diferentes formatos. En .NET, podemos serializar datos en XML utilizando XmlSerializer
o manejar documentos XML con LINQ to XML. Este artículo proporciona un enfoque más avanzado, incluyendo validaciones de esquema (XSD), transformaciones con XSLT y uso avanzado de LINQ.
Serialización XML Avanzada
Serialización con Validación XSD
Para garantizar que los datos sean correctos, podemos validar un XML contra un esquema XSD. Primero, creamos el esquema:
Archivo persona.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Persona">
<xs:complexType>
<xs:sequence>
<xs:element name="Nombre" type="xs:string" />
<xs:element name="Domicilio" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Validamos el XML con XmlReaderSettings
:
using System;
using System.Xml;
using System.Xml.Schema;
class Program {
static void Main() {
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add(null, "persona.xsd");
settings.ValidationType = ValidationType.Schema;
settings.ValidationEventHandler += (sender, e) =>
Console.WriteLine("Error de validación: " + e.Message);
using (XmlReader reader = XmlReader.Create("persona.xml", settings)) {
while (reader.Read()) {}
}
}
}
Transformación XML con XSLT
Podemos transformar XML a otros formatos como HTML utilizando XSLT.
Ejemplo de transformación XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Lista de Personas</h2>
<table border="1">
<tr><th>Nombre</th><th>Domicilio</th></tr>
<xsl:for-each select="Persona">
<tr>
<td><xsl:value-of select="Nombre"/></td>
<td><xsl:value-of select="Domicilio"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Para aplicar la transformación:
using System.Xml.Xsl;
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("transformacion.xsl");
xslt.Transform("persona.xml", "persona.html");
LINQ to XML Avanzado
Filtrar y Ordenar Datos XML con LINQ
using System;
using System.Linq;
using System.Xml.Linq;
class Program {
static void Main() {
XDocument doc = XDocument.Load("personas.xml");
var personas = doc.Descendants("Persona")
.Where(p => p.Element("Domicilio").Value.Contains("Madrid"))
.OrderBy(p => p.Element("Nombre").Value);
foreach (var persona in personas)
Console.WriteLine(persona.Element("Nombre").Value);
}
}
Conclusión
En esta guía hemos visto cómo mejorar la serialización XML con validaciones XSD, cómo transformar XML con XSLT y cómo aprovechar LINQ to XML para procesar datos eficientemente. Dominar estas técnicas te permitirá construir aplicaciones más robustas y escalables.