Está en la página 1de 21

XML desde .

NET

Mara Teresa Martn Calvilla Miguel Vaquero Herrero

Departamento de Informtica y Automtica Universidad de Salamanca

-1-

XML desde .NET

Informacin de los autores: Mara Teresa Martn Calvilla Miguel Vaquero Herrero

Este documento puede ser libremente distribuido. <<2005>> Departamento de Informtica y Automtica - Universidad de Salamanca.

Programacin Orientada a Objetos 2

Martn y Vaquero

Resumen
Este informe muestra la forma de trabajar con documentos XML desde la plataforma .NET. Para ello, se realiza una introduccin al lenguaje XML con un breve ejemplo. Posteriormente, se describe cmo almacenar el estado de un objeto para comunicrselo a otro mediante el protocolo SOAP y que sea recuperado. Se presentan las clases ms importantes para la manipulacin de documentos XML (lectura y escritura) situadas dentro del espacio de nombres System.Xml que proporciona el framework. Se codifican dos programas ejemplo utilizando el lenguaje C# para ilustrarlo.

Abstract
This report shows the way to work with XML documents from .NET platform. For that, an introduction to XML is given with a simple example. Then, it describes how to store an object and send it to another object with SOAP protocol. The most important classes to work with XML (read and write) which System.Xml frameworks namespace provides are explained. Two C# program samples are attached to show that.

Programacin Orientada a Objetos

XML desde .NET

Tabla de Contenidos

1. Introduccin a XML..................................................................... 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. Qu es XML? Breve historia Diferencias con HTML Principales caractersticas Sintaxis de un documento XML Hojas de estilo

4 4 4 5 5 6 7 10 12 14 17 19 20

2. Ejemplo......................................................................................... 8 3. Caractersticas para el uso de XML y C#..................................... 4. Clases en System.Xml.................................................................. 5. Ejemplo: 5.1 5.2 XmlWriter XmlReader

6. Conclusiones................................................................................ 7. Enlaces.................................................................................

Tabla de figuras

Figura 1. Origen de XML Figura 2. Estructura de un DTD .. Figura 3. Anatoma de un mensaje SOAP..

Pgina 5 Pgina 9 Pgina 10

Programacin Orientada a Objetos 4

Martn y Vaquero

1. INTRODUCCIN A XML

1.1 Qu es XML? XML (Extensible Markup Language) es un lenguaje de marcado que proporciona un formato para describir datos. Con ello se facilita la realizacin de declaraciones de contenido ms precisas y la obtencin de resultados de bsqueda ms significativos en varias plataformas.

1.2 Breve historia de XML La versin 1.0 del lenguaje XML es una recomendacin del W3C desde Febrero de 1998. Est basado en el estndar SGML (Standard Generalized Markup Language, ISO 8879), que data de 1986, pero que empez a gestarse desde principios de los aros 70. SGML, a su vez, est basado en el GML creado por IBM en 1969. Esto significa que aunque XML pueda parecer moderno, sus conceptos estn ms que asentados y aceptados de forma amplia. Est adems asociado a la recomendacin del W3C DOM (Document Object Model), aprobado tambin en 1998. ste no es ms que un modelo de objetos (en forma de API) que permite acceder a las diferentes partes que pueden componer un documento XML o HTML. Es un modelo independiente de la plataforma y del lenguaje de programacin. El objetivo es que cualquier script pueda ejecutarse de forma ms o menos homognea en cualquier navegador que soporte dicho DOM. SGML proporciona un modo consistente y preciso de aplicar etiquetas para describir las partes que componen un documento, permitiendo adems el intercambio de documentos entre diferentes plataformas. Sin embargo, el problema que se atribuye a SGML es su excesiva dificultad. As que, manteniendo su misma filosofa, de l se deriv XML como subconjunto simplificado, eliminando las partes ms engorrosas y menos tiles. Como su padre, XML es un metalenguaje, es decir, es un lenguaje para definir lenguajes. Los elementos que lo componen pueden dar informacin sobre lo que contienen, no necesariamente sobre su estructura fsica o presentacin, como ocurre en HTML.
5 Programacin Orientada a Objetos

XML desde .NET

1.3 Diferencias con HTML En una primera aproximacin podemos pensar que mediante XML tambin podemos definir el HTML. La diferencia fundamental entre ellos es que HTML es simplemente un lenguaje, mientras que XML como se ha dicho es un metalenguaje. XML permite la separacin de la presentacin de datos. As, si en HTML se utilizan etiquetas para indicarle al explorador que muestre los datos como negrita o cursiva, en XML se emplean nicamente para describir datos. XML mejora a HTML ya que establece un estndar fijo al que atenerse separando el contenido de la presentacin y se propone como lenguaje de bajo nivel (a nivel de aplicacin, no de programacin) para el intercambio de informacin estructurada entre diferentes plataformas.

SGML XML HTML

Figura I: "Origen de XML

1.4 Principales caractersticas de XML Tipos de documentos XML Existen dos tipos de documentos XML: Bien formados: cumplen las especificaciones del lenguaje respecto a las reglas sintcticas sin estar sujetos a unos elementos fijados en un DTD. De hecho, los documentos XML deben tener una estructura jerrquica muy estricta, y los documentos bien formados deben cumplirla. Vlidos: adems de estar bien formados, siguen una estructura y una semntica determinada por un DTD: sus elementos y sobre todo la estructura jerrquica que define el DTD, adems de los atributos, deben ajustarse a lo que el DTD dicte.
Programacin Orientada a Objetos 6

Martn y Vaquero

Qu es un DTD? En la clasificacin anterior se ha hablado de DTD (Document Type Definition) que es una definicin de los elementos que puede incluir un documento XML, de la forma en que deben hacerlo (qu elementos van dentro de otros) y los atributos que se les puede dar. En definitiva, es una especie de definicin de la gramtica del documento. Cuando se procesa cualquier informacin formateada mediante XML, lo primero es comprobar si est bien formada, y luego, si incluye o referencia a un DTD, comprobar que sigue sus reglas gramaticales. De ah, la diferencia entre: 1 Parsers no validadores: procesan documentos XML sin comprobar que siguen las reglas marcadas por un DTD. Slo comprueban que est bien formado. 2 Parsers validadores: comprueban que adems de ser un documento bien

formado se atiene a su DTD y por tanto, es vlido.

1.5 Sintaxis de un documento XML Antes de empezar con el estudio de las etiquetas, debemos resaltar una serie de aspectos sobre los documentos en XML: diferencian maysculas y minsculas, todos los espacios y retornos de carro se tienen en cuenta, hay ciertos caracteres especiales reservados Su sintaxis es: &nombre. los valores de los atributos de todas las etiquetas deben ir siempre entrecomillados.

Debemos diferenciar entre: Elementos: son las entidades en s, lo que tiene contenido. Hay dos tipos: Vacos: no tienen contenido dentro del documento. Son de la forma: <etiqueta/> No vacos Etiquetas: slo describen a los elementos.

Programacin Orientada a Objetos

XML desde .NET

Un documento XML est compuesto por elementos, y en su sintaxis stos se nombran mediante etiquetas. Los elementos de un documento XML pueden a su vez contener subelementos, con la nica restriccin de que toda etiqueta no vaca debe tener una etiqueta de cerrado, de forma que <etiqueta> debe estar seguida de </etiqueta>. De esta manera todos los elementos quedarn perfectamente anidados.

1.6 Hojas de estilo Se usan hojas de estilos, para mostrar los datos en un explorador. Como hemos dicho antes, en XML se separan los datos de la presentacin y el proceso, de forma que es posible mostrar y procesar los datos segn se desee, aplicando distintas aplicaciones y hojas de estilos. Para definir hojas de estilo tenemos el lenguaje XSL (Extensible Stylesheet Language) que es un lenguaje para transformar documentos XML y CSS (Cascading Style Sheets).

Programacin Orientada a Objetos 8

Martn y Vaquero

2. EJEMPLO
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <book> <title>Learning to Program the Object-Oriented Way with C#</title> <author>Vinny Cahill & Donal Lafferty</autor> <price>63.95$</price> <publisher>Springer</publisher> <ISBN>1852336021</ISBN> <paperback>608 pages</paperback> </book>

La primera lnea es la forma en la que debe empezar cualquier documento XML en la que indicamos la versin de XML utilizada en el documento, el tipo de codificacin y si va acompaado de un DTD (standalone="no"), o no lo necesita

(standalone="yes"). Si queremos referenciar un DTD dentro de este documento XML podemos: Incluir dentro del documento una referencia al documento DTD en forma de URI (Universal Resource Identifier) mediante la siguiente sintaxis:
<!DOCTYPE book SYSTEM "/DTD/book.dtd">

Incluir dentro del propio documento el DTD de este modo


<?xml version="1.0"?> <!DOCTYPE book [ <!ELEMENT book (title+, author+, price+, publisher+, ISBN+, paperback?)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST price coin (dollar|euro) #IMPLIED> <!ELEMENT publisher (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT paperback <EMPTY> ]>

Programacin Orientada a Objetos

XML desde .NET

<book> <title> Learning to Program the ObjectOriented Way with C#</title> <author> Vinny Cahill & Donal Lafferty</autor> <price> 63.95$</price> <publisher> Springer</publisher> <ISBN> 1852336021</ISBN> <paperback> 608 pages</paperback> </book>

Despus de la clusula <!ELEMENT se incluye el nombre del elemento (el que luego se indicara en la etiqueta), y despus si el elemento es no vaco, se indica el contenido que puede tener el elemento: lista de elementos hijos, tipo de contenido, tipo de uso se permite hacer de esos elementos dentro del documento, Si es un elemento vaco, se indica con la palabra EMPTY. Para la definicin de los atributos, se usa la declaracin <!ATTLIST, seguida del nombre de elemento del que estamos declarando los atributos, el nombre del atributo, los posibles valores del atributo, Este ejemplo se puede representar como un rbol de elementos. Existe un elemento raz book, que siempre debe ser nico y que se llamar como el nombre que se ponga en la definicin del <!DOCTYPE si est asociado a un DTD. Y de l descienden las ramas de sus respectivos elementos descendientes o hijos: title, author, price, publisher, ISBN, paperback:

Book

Title

Author

Price

Publisher

ISBN

Paperback

Figura II: "Estructura de un DTD"


Programacin Orientada a Objetos 10

Martn y Vaquero

3. CARACTERSTICAS PARA EL USO DE XML Y C#

La informacin procedente de diferentes servicios suele tener formatos totalmente distintos de forma que el intercambio de informacin entre ellos supone un serio problema. Para salvar este contratiempo en .NET se utiliza el lenguaje XML. Toda la informacin que tenga que fluir de un servicio a otro ser descrita con XML con el fin de establecer la correspondencia entre el formato de la informacin de cada servicio y los dems. Adems, la comunicacin entre servicios se realizar utilizando el protocolo SOAP (Simple Object Access Protocol) que, como es de esperar, tambin est basado en XML y que permite invocar mtodos, servicios, componentes y objetos de otros servicios remotos. SOAP proporciona un mecanismo estndar de empaquetar un mensaje. Un mensaje SOAP se compone de un sobre que contiene el cuerpo del mensaje y cualquier informacin de cabecera que se utiliza para describir el mensaje. El siguiente ejemplo muestra como una clase enva a otra el estado de un objeto concreto, en este caso un objeto meeting mediante un mensaje SOAP.
<soap:Envelope xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/> <soap:Header> <!Informacion adicional de cabecera. --> <To>Maite</To> <From>Mika</From> </soap:Header> <soap:Body> <! Mensaje: documento XML. --> <meeting> <date>29 Abril 2005</date> <time>11:30</time> <place>Plaza mayor</place> </meeting>

</soap:Envelope>

Figura III: "Anatoma de un mensaje SOAP"


11 Programacin Orientada a Objetos

XML desde .NET

Si se quiere escribir una aplicacin, que trabaje con XML, para la plataforma .NET el lenguaje de programacin utilizado ser C# (C sharp) y la forma mas indicada de manipular los documentos XML ser a travs de las clases proporcionadas por el propio framework de .NET debido a su sencillez, su eficiencia y su magnfico soporte de los estndares actuales. Este framework da soporte para lectura y escritura de documentos XML, as como para su transformacin, filtrado, integracin con bases de datos y creacin de servicios Web entre otras tareas ms complejas. Las clases de este framework estn disponibles desde varios los espacios de nombres del sistema. Las clases del ncleo para el trabajo con XML estn disponibles en el espacio de nombres System.Xml.

Espacio de nombres: Del mismo modo que los ficheros se organizan en directorios, los tipos de datos se organizan en espacios de nombres. Por un lado estos espacios permiten tener ms organizados los tipos de datos, lo que facilita su localizacin. Todas las clases ms comnmente usadas en cualquier aplicacin pertenecen al espacio de nombres llamado System, las de acceso a bases de datos en System.Data, las de realizacin de operaciones de entrada/salida en System.IO, las de manipulacin de Documentos XML en System.Xml, etc. Por otro lado, los espacios de nombres tambin permiten poder usar en un mismo programa varias clases con igual nombre si pertenecen a espacios diferentes.

Programacin Orientada a Objetos 12

Martn y Vaquero

4. CLASES EN SYSTEM.XML:

XmlReader,

XmlWriter, XmlNode, XmlElement, etc. son clases abstractas del

ncleo, todas definen la funcionalidad comn que las clases derivadas de ellas deben soportar.

XmlReader proporciona mtodos para el acceso rpido a datos XML, sin almacenamiento en cach y con desplazamiento solamente adelante. XmlTextReader (clase derivada de XmlReader) proporciona la capacidad de lectura de documentos desde un flujo de texto.

XmlWriter representa un sistema de escritura que proporciona un medio rpido, sin almacenamiento en cach y con desplazamiento slo hacia delante para generar secuencias o archivos con datos XML. XmlTextWriter (derivada de XmlWriter) permite escritura de flujos de texto.

XmlNode proporciona un nodo en un documento XML. XmlNodeReader (clase derivada de XmlReader) soporta lectura de documentos en un rbol DOM (Document Objects Model) en memoria. XmlNodeWriter (derivada de XmlWriter) permite escritura en un rbol DOM en memoria.

XmlElement representa un elemento. La clase XmlElement tiene varios mtodos que le permiten tener acceso a los nodos de atributo

(XmlElement.GetAttribute,XmlElement.SetAttribute, etc.). Adems, se puede llamar a la propiedad XmlElement.Attributes que devuelve una XmlAttributeCollection, que permite tener acceso a los atributos por nombre o por ndice de la coleccin.

13

Programacin Orientada a Objetos

XML desde .NET

XmlAttribute representa un atributo. Los valores vlidos y predeterminados del atributo se definen en una DTD o un esquema. AttributeCollection (clase derivada de XmlAttribute) representa una coleccin de atributos a los que se puede obtener acceso por nombre o por ndice.

Todas estas clases y otras muchas estn agrupadas en la biblioteca System.Xml.dll. As pues, si se quieren utilizar las clases del framework de .NET para XML desde C#, se debe importar el espacio de nombres System.Xml con la ayuda de directivas y a la hora de compilar el cdigo, se debe pasar System.Xml.dll como parmetro a csc.exe.

Programacin Orientada a Objetos 14

Martn y Vaquero

5. 1. EJEMPLO: WriteXML

Se desea generar el fragmento de cdigo XML anteriormente visto desde una aplicacin escrita en C#:

Cdigo en C# :
namespace WriteXML { using System; using System.Xml; public class BookData { private const string m_strFileName = "c:\\book.xml"; public static void Main() { XmlTextWriter bookWriter = null; bookWriter = new XmlTextWriter (m_strFileName, null); try { bookWriter.Formatting = Formatting.Indented; bookWriter.Indentation= 6; bookWriter.Namespaces = false; bookWriter.WriteStartDocument(); bookWriter.WriteStartElement("", "book", ""); bookWriter.WriteStartElement("", "title", ""); bookWriter.WriteString("Learning to Program the Object-Oriented Way with C#"); bookWriter.WriteEndElement(); bookWriter.WriteStartElement("", "author", ""); bookWriter.WriteString("Vinny Cahill & Donal Lafferty "); bookWriter.WriteEndElement(); bookWriter.WriteStartElement("", " price ", ""); bookWriter.WriteString("63.95"); bookWriter.WriteEndElement(); bookWriter.WriteStartElement("", " publisher ", ""); bookWriter.WriteString("Springer "); bookWriter.WriteEndElement(); bookWriter.WriteStartElement("", " ISBN ", ""); bookWriter.WriteString("1852336021"); bookWriter.WriteEndElement(); 15 Programacin Orientada a Objetos

XML desde .NET

bookWriter.WriteStartElement("", " paperback ",""); bookWriter.WriteString("608 pages "); bookWriter.WriteEndElement(); bookWriter.WriteEndElement(); bookWriter.Flush(); } catch(Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } finally { if (bookWriter != null) { bookWriter.Close(); } } } } }

Compilacin del cdigo: Ahora solamente se debe guardar el cdigo con extensin .cs, BookXML.cs por ejemplo, y compilar con la siguiente lnea de comandos:
csc /r:System.Xml.dll BookXML.cs

Esto producir el correspondiente fichero BookXML.exe, el cual, al ser ejecutado crear un documento XML llamado book.xml. Estructura del programa: Lo primero que se observa en el cdigo es la utilizacin de los espacios de nombres System y System.Xml que, como se dijo anteriormente, contienen las clases que utilizaremos para crear el documento XML. Si durante la ejecucin del programa no se produce ninguna excepcin, se ejecutarn todas las instrucciones contenidas entre las llaves de la clusula try. Por el contrario, si se produce alguna, se informa por pantalla del suceso. Finalmente se cierra el acceso al objeto BookWriter.

Programacin Orientada a Objetos 16

Martn y Vaquero

Manejo de las clases: Se declara la clase BookData con un nico atributo privado de clase string, m_strFileName, y un nico mtodo pblico Main. En ste mtodo se declara un objeto, BookWriter, haciendo uso de la clase XmlTextWriter que proporciona el framework. Se crea un primer elemento BookData que ser el elemento raz que contendr al resto. Se crean los diferentes subelementos y se les asignan los diferentes pares etiquetavalor, bien sea con la informacin del estado de un objeto (conjunto de los valores actuales de sus atributos) o con cualquier otra. De esta forma se puede guardar el estado de un objeto, (tcnica llamada persistencia de los objetos) o bien comunicrselo a otros objetos o incluso otras aplicaciones mediante el envo de un mensaje SOAP.

17

Programacin Orientada a Objetos

XML desde .NET

5.2. EJEMPLO: ReadXML

Cdigo en C# :

namespace ReadXML { using System; using System.Xml;

public class ReadBookAccount { private const string m_strFileName = "c:\\book.xml";

public static void Main() { XmlTextReader bookReader = null; bookReader = new XmlTextReader (m_strFileName);

while (bookReader.Read()) { if (bookReader.NodeType == XmlNodeType.Element){ if (bookReader.LocalName.Equals("title")){ Console.Write("{0} Book Title: ", bookReader.ReadString()); } if (bookReader.LocalName.Equals("author")) { Console.WriteLine("{0}", Book author: bankReader.ReadString() ); } if (bookReader.LocalName.Equals("price")) Console.WriteLine("{0}", Book price: $ bankReader.ReadString()) } if (bookReader.LocalName.Equals("publisher")) { Console.WriteLine("{0}", Book publisher: bankReader.ReadString()); } if (bookReader.LocalName.Equals("ISBN")) { {

Console.WriteLine("{0}", Book ISBN:

Programacin Orientada a Objetos 18

Martn y Vaquero

bankReader.ReadString()); } if (bookReader.LocalName.Equals("paperback")) { Console.WriteLine("{0}", Book papaerback: bankReader.ReadString() pages); } } } } } }

Compilacin del cdigo: Se compilar el cdigo de la misma manera que el anterior. Se obtendr una salida por pantalla como esta:
Book title: Learning to Programm the Object-Oriented Way with C# Book author: Vinny Cahill & Donal Lafferty Book price: $68.95 Book publisher: Springer Book ISBN: 1852336021 Book paperback: 608 pages

Estructura del programa: Se crea un objeto de la clase XmlTextReader indicando el nombre del fichero que se va a leer: book.xml. Se entra en un bucle de lectura donde se comprueba que cada etiqueta leda corresponde con la informacin esperada para, en caso afirmativo, presentarla por pantalla.

19

Programacin Orientada a Objetos

XML desde .NET

6. CONCLUSIONES:

Durante los ltimos aos XML ha tenido un crecimiento exponencial sobre todo si nos basamos en sus apariciones en los medios de comunicacin de todo tipo, menciones en pginas web, soporte software, tutoriales, etc. Este lenguaje junto con el paradigma de orientacin a objetos desde la plataforma .NET son el punto base de las aplicaciones ms actuales. Por ello, es necesario conocerlos y relacionarlos. Gracias al estndar XML se puede guardar el estado de un objeto, o bien comunicrselo a otros. As como que otras aplicaciones puedan crear otros objetos a partir de dicha informacin con la garanta de que van a poder comprenderlo aunque no hayan sido diseados explcitamente para ello. Por tanto, se guardan los datos independientemente de su presentacin en formato XML para que puedan ser utilizados por otros programas.

Programacin Orientada a Objetos 20

Martn y Vaquero

7. ENLACES:

Pgina oficial de XML: www.xml.com

Tutorial bsico de XML: http://www.dat.etsit.upm.es/~abarbero/curso/xml/xmltutorial.html

Protocolo SOAP: para que sirve, sus ventajas y la estructura de los mensajes: http://www.desarrolloweb.com/articulos/1557.php?manual=54

XML para programadores de C# : http://www.perfectxml.com/articles/xml/csharp.asp

Guardar el estado de un objeto (serializacin): http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpr ef/html/frlrfSystemXmlSerialization.asp

MSDN de Microsoft sobre XML: http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/vsi ntro7/html/vxorixmlinvisualstudio.asp

21

Programacin Orientada a Objetos

También podría gustarte