C sharp NET/Capítulo 19
XML
editar
Cuando Microsoft lanzó las primeras versiones de su plataforma .NET, nos sorprendió a todos por su apuesta por los estándares, lo cual contrastaba claramente con prácticas anteriores.
El estándar más importante adoptado en la plataforma .NET es sin duda XML (eXtensible Markup Language, Lenguaje Extensible de Marcas). XML es una tecnología tan integrada en .NET, que la propia plataforma utiliza XML internamente para sus archivos de configuración y para su propia documentación. XML es, por lo tanto, una tecnología con una importancia fundamental en .NET.
Conceptos básicos de XML
editarXML es un lenguaje para estructurar datos. Sirve, por ejemplo, para almacenar en un archivo de texto una hoja de cálculo, una libreta de direcciones o un dibujo vectorial. XML hace mucho más fácil al ordenador el proceso de generar datos, leer los datos y asegurarse de que la estructura de los datos no es ambigua. A su vez, contiene características que aseguran su validez durante mucho tiempo: es ampliable, independiente de plataforma, no pertenece a ninguna firma concreta de software y soporta internacionalización.
El aspecto de un archivo XML es muy similar al de un archivo HTML, con texto encerrado entre etiquetas. Las etiquetas no son más que palabras rodeadas por < y >. El siguiente podría ser un ejemplo de archivo XML que describe a la persona que escribe éste tutorial.
<?xml version="1.0"?> <persona> <nombre>Fabian</nombre> <apellido>Seoane</apellido> <organizacion>Mono Hispano</organizacion> <pagina>http://fseoane.net</pagina> </persona>
La diferencia fundamental con HTML es que XML no tiene etiquetas predefinidas, sino que éstas dependen de la implementación. Por ejemplo, en el archivo que acabamos de ver, las etiquetas disponibles podrían ser persona, nombre, apellido, ..., mientras que en un archivo XML que describa una librería, las etiquetas podrían ser ensamblado, clase, método, etc.
Todo ésto podría parecer un lío increíble si no se dispusiera de un mecanismo para traducir entre los diversos formatos XML, por ejemplo, entre el archivo persona y un archivo HTML que muestra la información sobre la persona. Por fortuna, esto existe, se llaman hojas XSL y la librería de clases dispone de métodos para transformar entre XML a partir de hojas XSL.
Si quieres saber más sobre XML te sugiero que mires las siguientes páginas: http://w3.org/XML/, http://xml.com
XML en .Net
editarA lo largo de este capítulo utilizaremos de forma extensiva el espacio de nombres System.Xml. Los estándares cubiertos por este espacio de nombres son:
- XML 1.0 - http://www.w3.org/TR/1998/REC-xml-19980210 - includyendo soporte para DTDs.
- XML Namespaces - http://www.w3.org/TR/REC-xml-names/ - tanto stream level como DOM.
- XSD Schemas - http://www.w3.org/2001/XMLSchema
- XPath expressions - http://www.w3.org/TR/xpath
- XSLT transformations - http://www.w3.org/TR/xslt
- DOM Level 1 Core - http://www.w3.org/TR/REC-DOM-Level-1/
- DOM Level 2 Core - http://www.w3.org/TR/DOM-Level-2/
Escribir un archivo XML
editarComenzaremos por escribir un sencillo archivo XML. En éste caso será el ejemplo que acabamos de utilizar.
El código siguiente crea un documento llamado ejemplo.xml con un documento xml como el del ejemplo anterior.
using System; using System.Xml; class EjemploXml{ public static void Main() { XmlTextWriter writer = new XmlTextWriter("ejemplo.xml", System.Text.Encoding.UTF8); //Usa indentación por legibilidad writer.Formatting = Formatting.Indented; //Escribe la declaración del XML writer.WriteStartDocument(); //Escribe el elemento raiz writer.WriteStartElement("libro"); //Escribe los elementos dentro de sus etiquetas writer.WriteElementString("titulo", "El lenguaje C#"); writer.WriteElementString("dificultad", "media"); writer.WriteElementString("organizacion", "Mono Hispano - wikilibros"); writer.WriteEndElement(); writer.Flush(); writer.Close(); } }
El cual creará un archivo ejemplo.xml con el siguiente aspecto:
<?xml version="1.0" encoding="utf-8"?> <libro> <titulo>El lenguaje C#</titulo> <dificultad>media</dificultad> <organizacion>Mono Hispano - wikilibros</organizacion> </libro>