Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
NET
-1-
XML desde .NET
Resumen
Este informe muestra la forma de trabajar con documentos XML desde la plataforma
.NET. Para ello, se realiza una introducción al lenguaje XML con un breve ejemplo.
Posteriormente, se describe cómo almacenar el estado de un objeto para comunicárselo
a otro mediante el protocolo SOAP y que sea recuperado.
Se presentan las clases más importantes para la manipulación 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
framework’s namespace provides are explained. Two C# program samples are attached
to show that.
Tabla de Contenidos
1. Introducción a XML..................................................................... 4
1.1. ¿Qué es XML? 4
1.2. Breve historia 4
1.3. Diferencias con HTML 5
1.4. Principales características 5
1.5. Sintaxis de un documento XML 6
1.6. Hojas de estilo 7
2. Ejemplo......................................................................................... 8
3. Características para el uso de XML y C#..................................... 10
4. Clases en System.Xml.................................................................. 12
5. Ejemplo:
5.1 XmlWriter 14
5.2 XmlReader 17
6. Conclusiones................................................................................ 19
7. Enlaces……................................................................................. 20
Tabla de figuras
1. INTRODUCCIÓN A XML
La versión 1.0 del lenguaje XML es una recomendación del W3C desde Febrero de
1998. Está basado en el estándar 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 están más que asentados y
aceptados de forma amplia.
En una primera aproximación podemos pensar que mediante XML también 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
separación de la presentación 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
estándar fijo al que atenerse separando el contenido de la presentación y se propone
como lenguaje de bajo nivel (a nivel de aplicación, no de programación) para el
intercambio de información estructurada entre diferentes plataformas.
SGML
XML
HTML
• Bien formados: cumplen las especificaciones del lenguaje respecto a las reglas
sintácticas sin estar sujetos a unos elementos fijados en un DTD. De hecho, los
documentos XML deben tener una estructura jerárquica muy estricta, y los documentos
bien formados deben cumplirla.
• Válidos: además de estar bien formados, siguen una estructura y una semántica
determinada por un DTD: sus elementos y sobre todo la estructura jerárquica que define
el DTD, además de los atributos, deben ajustarse a lo que el DTD dicte.
¿Qué es un DTD?
• Elementos: son las entidades en sí, lo que tiene contenido. Hay dos tipos:
No vacíos
Se usan hojas de estilos, para mostrar los datos en un explorador. Como hemos dicho
antes, en XML se separan los datos de la presentación y el proceso, de forma que es
posible mostrar y procesar los datos según 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).
2. EJEMPLO
<?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>
]>
<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>
Book
El siguiente ejemplo muestra como una clase envía 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>
Si se quiere escribir una aplicación, que trabaje con XML, para la plataforma .NET
el lenguaje de programación utilizado será C# (C sharp) y la forma mas indicada de
manipular los documentos XML será a través de las clases proporcionadas por el propio
framework de .NET debido a su sencillez, su eficiencia y su magnífico soporte de los
estándares actuales. Este framework da soporte para lectura y escritura de documentos
XML, así como para su transformación, filtrado, integración con bases de datos y
creación de servicios Web entre otras tareas más complejas.
Las clases de este framework están disponibles desde varios los espacios de
nombres del sistema. Las clases del núcleo para el trabajo con XML están 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 más organizados los tipos de datos, lo que
facilita su localización. Todas las clases más comúnmente usadas en cualquier
aplicación pertenecen al espacio de nombres llamado System, las de acceso a bases de
datos en System.Data, las de realización de operaciones de entrada/salida en
System.IO, las de manipulación de Documentos XML en System.Xml, etc.
Por otro lado, los espacios de nombres también permiten poder usar en un mismo
programa varias clases con igual nombre si pertenecen a espacios diferentes.
4. CLASES EN SYSTEM.XML:
5. 1. EJEMPLO: WriteXML
Se desea generar el fragmento de código XML anteriormente visto desde una aplicación
escrita en C#:
Código en C# :
namespace WriteXML
{
using System;
using System.Xml;
try
{
bookWriter.Formatting = Formatting.Indented;
bookWriter.Indentation= 6;
bookWriter.Namespaces = false;
bookWriter.WriteStartDocument();
bookWriter.WriteEndElement();
bookWriter.WriteString("Springer ");
bookWriter.WriteEndElement();
bookWriter.WriteEndElement();
bookWriter.Flush();
}
catch(Exception e)
{
Console.WriteLine("Exception: {0}", e.ToString());
}
finally
{
if (bookWriter != null)
{
bookWriter.Close();
}
}
}
}
}
Ahora solamente se debe guardar el código con extensión .cs, “BookXML.cs” por
ejemplo, y compilar con la siguiente línea de comandos:
Se crea un primer elemento BookData que será el elemento raíz que contendrá al
resto.
Se crean los diferentes subelementos y se les asignan los diferentes pares etiqueta-
valor, bien sea con la información 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, (técnica llamada persistencia de los objetos) o bien comunicárselo a otros
objetos o incluso otras aplicaciones mediante el envío de un mensaje SOAP.
Código en C# :
namespace ReadXML
{
using System;
using System.Xml;
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:
bankReader.ReadString());
}
if (bookReader.LocalName.Equals("paperback")) {
Console.WriteLine("{0}", Book papaerback:
bankReader.ReadString() pages);
}
}
}
6. CONCLUSIONES:
Durante los últimos años XML ha tenido un crecimiento exponencial sobre todo si nos
basamos en sus apariciones en los medios de comunicación de todo tipo, menciones en
páginas web, soporte software, tutoriales, etc. Este lenguaje junto con el paradigma de
orientación a objetos desde la plataforma .NET son el punto base de las aplicaciones
más actuales. Por ello, es necesario conocerlos y relacionarlos.
7. ENLACES:
www.xml.com