Documentos de Académico
Documentos de Profesional
Documentos de Cultura
5-Librerias NET Framework
5-Librerias NET Framework
NET
Framework
David Gan Jimnez
P08/B0036/01628
FUOC P08/B0036/01628
ndice
Introduccin..........................................................................................
Objetivos.................................................................................................
1. Clases bsicas...................................................................................
10
10
11
15
16
17
1.10.System.Array ..............................................................................
17
1.11.System.Environment .................................................................
21
23
23
24
25
26
3. Entrada/Salida (System.IO).........................................................
28
4. XML (System.Xml).........................................................................
32
32
32
34
35
35
36
37
38
38
40
40
41
43
46
FUOC P08/B0036/01628
48
Actividades.............................................................................................
49
Bibliografa............................................................................................
51
FUOC P08/B0036/01628
Introduccin
FUOC P08/B0036/01628
Objetivos
FUOC P08/B0036/01628
1. Clases bsicas
El namespaceSystem es el namespace raz de la librera de clases del .NET Framework, el resto de namespaces se incluyen dentro del mismo. Las clases que
pertenecen a este namespace ofrecen funcionalidades bsicas o necesarias para
el resto de funcionalidades de la librera. En este apartado, veremos las ms
importantes.
1.1. System Object
La jerarqua de clases de .NET comienza en la clase Object, es decir, todas
las clases y dems elementos (interfaces, enumeraciones, estructuras, etc.) son,
por herencia directa o indirecta, subclases de Object. Por lo tanto, todas las
clases o elementos heredan y pueden sobrescribir los mtodos de la clase Object para adecuarlos a sus necesidades. Estos mtodos son los siguientes:
FUOC P08/B0036/01628
el objeto en tablas de hash (por ejemplo la coleccin Hashtable ). Idealmente, el nmero debe de ser diferente para instancias que representan
objetos diferentes.
ToString. Devuelve una representacin en cadena de caracteres de la instancia actual. Es til sobrescribir este mtodo para mostrar informacin
sobre instancias de la clase correspondiente fcilmente, por ejemplo:
public override string ToString()
{
return this.Nombre + ", " + this.DNI;
}
Estructura
Descripcin
sbyte
SByte
byte
Byte
char
Char
short
Int16
ushort
UInt16
int
Int32
uint
UInt32
(1)
FUOC P08/B0036/01628
Tipoprimitivo
Estructura
Descripcin
long
Int64
ulong
UInt64
Float
Single
nmero real
Doubl
Double
Decimal
Decimal
Bool
Boolean
valor booleano
Todos los tipos bsicos tienen las siguientes propiedades y mtodos comunes:
Epsilon (float y double). Representa el menor nmero positivo mayor que cero.
1.3. System.Convert
La clase Convert contiene una serie de mtodos estticos que permiten convertir entre diferentes tipos de datos. Existe un mtodo de conversin para
cada tipo de dato bsico: ToInt32, ToDouble, ToChar, ToString, etc.
FUOC P08/B0036/01628
10
Cada uno de estos mtodos tiene distintas sobrecargas, cada una de ellas aceptando diferentes tipos de datos. Por ejemplo, podemos convertir un valor de
tipo Double a Int32 del siguiente modo:
double d = 4.7;
int i = Convert.ToInt32(d);
El resultado de la operacin almacenar en la variable i el valor 5, resultante
de redondear el valor 4,7.
1.4. System.Math
Esta clase contiene diferentes mtodos estticos que permiten realizar operaciones matemticas, entre ellos hay los siguientes:
Next. Devuelve un nmero entero aleatorio. Una de las sobrecargas de este mtodo permite especificar un rango de valores entre los que se debe
encontrar el nmero aleatorio generado. Por ejemplo, la siguiente instruccin devuelve un entero entre el 0 y el 10).
FUOC P08/B0036/01628
11
Actividad 1
Ejecutad las siguientes acciones:
1.6. System.String
Las instancias de la clase string representan cadenas de caracteres. Aunque
se trata de un tipo por referencia, en ciertas ocasiones la clase string se comporta como un tipo valor, por ejemplo:
Nota
En general el operador == aplicado a instancias de tipos referencia devuelve cierto si las
dos instancias son la misma
y falso si son distintas, aunque su valor sea idntico. Los
strings son una excepcin.
12
FUOC P08/B0036/01628
La clase string incluye multitud de miembros para permitir la creacin y edicin de cadenas de caracteres, a continuacin repasamos los ms importantes:
Creacin de strings:
Comparacin de strings:
if (s1 == s2)
{
// no se ejecuta
}
else if (s1 == s3)
{
// se ejecuta
}
Bsqueda en strings:
FUOC P08/B0036/01628
13
LastIndexOf. Devuelve la posicin de la ltima aparicin de una subcadena dentro de un string. Su funcionamiento es anlogo a IndexOf, pero la bsqueda se realiza de derecha a izquierda en vez de izquierda a derecha.
Modificacin de strings. La cadena de caracteres contenida en una variable de tipo string no se puede modificar directamente. No obstante, es
posible manipular esta cadena y crear otra cadena que contenga las modificaciones. Por eso, todos los mtodos de la clase string que modifican
una cadena devuelven una instancia de string (la nueva cadena creada),
y no modifican la instancia actual.
FUOC P08/B0036/01628
14
Trim. Elimina los espacios en blanco del inicio y el final del string:
string s =" Esto es un string ";
s = s.Trim ();
El resultado es la cadena "Esto es un string"
Otros mtodos:
Relacionada con la clase string, la clase StringBuilder del namespaceSystem.Text, tambin representa una cadena de caracteres, pero en este
caso s que es posible modificar dicha cadena directamente sobre la misma
instancia, utilizando los diferentes mtodos que proporciona dicha clase, entre otros:
Insert. Inserta la representacin en forma de string de un objeto especificado en una posicin determinada.
StringBuilder sb=new StringBuilder("Hola C#");
sb.Insert (4, ", bienvenido a");
La cadena resultante es "Hola, bienvenido a C#"
Por otro lado, es posible utilizar el indexador Chars para acceder o establecer
el carcter de cada posicin de la cadena:
StringBuilder sb = new StringBuilder("Hola CS");
sb[6] = '#';
FUOC P08/B0036/01628
15
El namespace System.Text contiene otras clases que permiten codificar y descodificar una cadena de caracteres en una secuencia de bits, siguiendo un sistema de codificacin como ASCII o Unicode.
Actividad 2
Ejecutad las siguientes acciones:
Cread un mtodo que reciba un parmetro de tipo object, que convierta ese objeto en un string.
1.7. System.DateTime
La estructura DateTime representa una fecha y un instante de tiempo. Ofrece
diversas propiedades que permiten acceder a las distintos elementos horarios,
entre ellas Year, Month, Day, Hour, Minute, Second y Millisecond.
Incluye tambin las propiedades estticas Now y Today, que devuelven respectivamente un DateTime correspondiente al instante y a la fecha actual.
Por otro lado, contiene varios mtodos AddX, que permiten aadir unidades
de tiempo al valor actual (AddDays, AddMoths, etc.), as como varios mtodos ToX
FUOC P08/B0036/01628
16
TimeSpan ts = d2 d1;
El valor del intervalo ts ser de 31 das. Tambin es posible comparar fechas
con los operadores de comparacin:
if (d1 > d2)
{
Console.WriteLine("d1 es una fecha posterior a d2");
}
1.8. System.TimeSpan
Como ya hemos visto, la estructura TimeSpan representa un intervalo de tiempo. Igual que la estructura DateTime, contiene varias propiedades que permiten acceder a las medidas de tiempo, desde milisegundos (Milliseconds),
hasta das (Days).
La estructura TimeSpan contiene varios mtodos como el mtodo Parse para
convertir un string a TimeSpan, el mtodo Duration que devuelve el mismo TimeSpan en valor absoluto, o Negation que devuelve el mismo TimeSpan pero con signo contrario. Por otro lado, tambin sobrescribe los operadores de suma, resta y comparaciones:
TimeSpan ts1 = new TimeSpan(5);
TimeSpan ts2 = new TimeSpan(3);
Actividad 3
Ejecutad las siguientes acciones:
Cread el mtodo FechaFinal que reciba como parmetro un objeto DateTime y un objeto TimeSpan, y que devuelva el DateTime
correspondiente a sumar la fecha y el intervalo de tiempo especificados.
FUOC P08/B0036/01628
17
1.9. System.Exception
Esta clase representa una excepcin producida en la aplicacin. El resto de
excepciones de .NET heredan de esta clase o de alguna de sus subclases. La
clase Exception tiene las subclases SystemException y ApplicationException de las que suelen derivar el resto de excepciones de sistema o de
aplicacin en vez de heredar directamente de Exception. Los miembros ms
importantes de un objeto Exception son los siguientes:
1.10. System.Array
La clase Array del namespaceSystem es la clase en la que se basan implcitamente todos los arrays. Esta clase define una serie de propiedades que heredan
todos los arrays, entre ellas:
Por otro lado, contiene varios mtodos estticos que permiten realizar operaciones sobre arrays, entre otros existen los siguientes:
Clear. Inicializa las posiciones indicadas del array. Para valores numricos
se inicializa a cero si el array es numrico, a false si es booleano o null
si es un array de referencias a objetos. La siguiente instruccin inicializa 3
posiciones del array a, a partir de la posicin 2:
Array.Clear (a, 2, 3);
18
FUOC P08/B0036/01628
Reverse. Invierte las posiciones indicadas del array (la primera posicin
pasa a ser la ltima, la segunda la penltima, etc. La primera instruccin
del siguiente ejemplo invierte todo el array, mientras que la segunda slo
invierte las posiciones de la 4 a la 7:
Array.Reverse (a);
Array.Reverse (a, 4, 7);
Sort. Ordena los elementos de un array unidimensional. Para poder realizar la ordenacin, es necesario que los elementos del array implementen la
interfaz IComparable, o proporcionar una instancia de una clase que implemente la interfaz IComparer, que permita comparar dos elementos del
tipo del array entre s. A continuacin, veremos un ejemplo de cada una.
La interfaz IComparable se utiliza para poder comparar diferentes objetos
entre s. Esta interfaz define el mtodo CompareTo, que devuelve un entero que indica si la instancia sobre la que se invoca dicho mtodo es menor,
igual o mayor que la instancia que se pasa por parmetro (devuelve un valor menor que cero, cero o mayor que cero respectivamente). En concreto,
el mtodo Sort utiliza esta interfaz para poder comparar los elementos
del array entre s al realizar la ordenacin.
Todos los tipos valor y algunos tipos referencia (como por ejemplo la clase
string) implementan la interfaz IComparable de forma que se puede
utilizar el mtodo Sort directamente con cualquier array de estos tipos.
Para poder utilizar el mtodo Sort con un array de objetos de una clase
personalizada, es necesario que dicha clase implemente esta interfaz. Por
ejemplo, si queremos ordenar un array de la clase Persona por dni, en
primer lugar deberemos modificar la clase Persona para que implemente
la interfaz IComparable:
public class Persona : IComparable
{
int dni;
char letranif;
string nombre;
if (p != null)
{
return this.dni - p.dni;
}
19
FUOC P08/B0036/01628
Para ordenar un array de objetos Persona simplemente llamamos al mtodo Sort de la clase Array:
Array.Sort(personas);
Tanto la interfaz IComparable, como el mtodo Sort, tienen versiones
genricas que permiten especificar el tipo de elementos que se comparan.
El siguiente ejemplo muestra las diferencias en la clase Persona al utilizar
la versin genrica de la interfaz IComparable:
public class Persona : IComparable<Persona>
{
int dni;
char letranif;
string nombre;
Como ya hemos comentado antes, el mtodo Sort tambin permite utilizar una instancia de IComparer para realizar la comparacin entre elementos. Esta opcin se suele utilizar cuando no se puede modificar la clase
de los elementos del array. La interfaz IComparer es genrica, y define el
mtodo Compare, que recibe dos instancias de la clase que se compara, y
devuelve un entero menor, igual o mayor que cero, indicando que la instancia del primer parmetro es menor, igual o mayor que la del segundo,
respectivamente.
Para utilizar la interfaz IComparer se puede crear una clase nueva, o utilizar una ya existente y aadirle el mtodo Compare. En el caso del array
de Persona la clase comparadora podra quedar as:
public class ComparadorPersonas : IComparer<Persona>
{
public int Compare(Persona p1, Persona p2)
{
return p1.DNI - p2.DNI;
}
}
FUOC P08/B0036/01628
20
ForEach. Ejecuta la accin indicada en cada elemento del array. Para especificar la accin que se va a realizar en cada elemento del array, se utiliza
el delegado Action:
public delegate void Action<T> (T obj)
Por ejemplo, para subir el sueldo de todos los empleados de un array de
Empleado, podemos utilizar la siguiente instruccin:
Array.ForEach<Empleado>(ae,
new
Action<Empleado>(SubirSueldo));
Donde SubirSueldo es un mtodo que incrementa la propiedad Sueldo
de un empleado:
public static void SubirSueldo(Empleado e)
{
e.Sueldo += 200;
}
Actividad 4
Ejecutad las siguientes acciones:
Cread el mtodo ReverseMatrix, que invierta una matriz de enteros rectangular de 2 dimensiones, es decir, que devuelva una matriz
en la que las filas de la matriz inicial pasen a ser las columnas de la
nueva y las columnas las filas.
FUOC P08/B0036/01628
21
1.11. System.Environment
La clase Environment ofrece una serie de propiedades y mtodos estticos que
permiten consultar diferentes caractersticas del entorno en el cual se ejecuta
la aplicacin. Entre ellos, destacamos los siguientes:
GetEnvironmentVariable. Este mtodo permite consultar el de una variable de entorno, por ejemplo, la siguiente instruccin devuelve el valor
de la variable de entorno PATH en el equipo en el que se ejecuta la aplicacin:
string path = Environment.GetEnvironmentVariable("PATH");
FUOC P08/B0036/01628
22
SetEnvironmentVariable. Crea, modifica o elimina una variable de entorno. El siguiente ejemplo muestra cmo extender la variable path del
sistema:
string p = Environment.GetEnvironmentVariable("PATH");
Environment.SetEnvironmentVariable("PATH",p+";C:\\TEMP");
GetFolderPath. Permite obtener la ruta de alguna de las carpetas especiales del sistema. Para indicar qu carpeta se quiere obtener se utiliza la
enumeracin SpecialFolder:
string escritorio =
Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
La enumeracin SpecialFolder contiene otros elementos como Favorites, MyComputer, MyDocuments, ProgramFiles, etc.
FUOC P08/B0036/01628
23
FUOC P08/B0036/01628
24
Keys. Devuelve una coleccin que contiene las claves de los elementos
del Hashtable.
Values. Devuelve una coleccin que contiene los elementos del Hashtable.
Add. Aade un nuevo elemento al Hashtable. Hay que indicar una clave
que identifique al elemento.
Contains. Devuelve true si existe algn elemento con la clave especificada, en otro caso devuelve false.
FUOC P08/B0036/01628
25
Como se puede ver, slo es posible aadir elementos al final de la cola, y tan
slo es posible consultar o eliminar elementos del principio de la cola. El siguiente ejemplo muestra cmo utilizar los mtodos anteriores:
Queue q = new Queue ();
q.Enqueue (1); q.Enqueue (2); q.Enqueue (3);
Las pilas, por otro lado, aparte de los mtodos Count, Contains o Clear,
tienen los siguientes mtodos especficos para acceder a sus elementos:
26
FUOC P08/B0036/01628
Coleccinequivalente
List<T>
ArrayList
Dictionary<K,V>
Hastable
Queue<T>
Queue
Stack<T>
Stack
SortedList<T>
SortedList
En el ejemplo, se puede ver que la clase Dictionary no tiene el mtodo Contains, sino ContainsKey en su lugar. Por otro lado, la ltima instruccin
recupera un elemento de tipo persona del diccionario sin necesidad de realizar
una conversin explcita, como hara falta en el caso de utilizar un Hashtable.
FUOC P08/B0036/01628
27
Actividad 5
Ejecutad las siguientes acciones:
FUOC P08/B0036/01628
28
3. Entrada/Salida (System.IO)
Para leer o escribir tipos de datos ms complejos de un stream, se suele utilizar un lector (Reader) o escritor (Writer) respectivamente. El namespaceSystem.IO define los siguientes lectores y escritores:
Generalmente, para leer y escribir de ficheros se utilizan las clases StreamReader y StreamWriter, ya que pueden inicializarse directamente especificando el nombre del fichero que se quiere abrir, sin necesidad de crear primero
un objeto de tipo FileStream. Adems, estas dos clases contienen los mto-
FUOC P08/B0036/01628
29
dos ReadLine y WriteLine, que permiten leer o escribir lneas enteras del
fichero respectivamente. En el siguiente ejemplo, vemos un mtodo que lee
un fichero y lo muestra por pantalla:
public void LeerFichero (string file)
{
StreamReader sr = new StreamReader (file);
while (s!=null)
{
Console.WriteLine (s);
s = sr.ReadLine ();
}
sr.Close();
}
Este otro ejemplo muestra cmo escribir en un fichero todo lo que se introduce
por el teclado:
public void EscribirFichero (string file)
{
StreamWriter sw = new StreamWriter (file);
while (s!="")
{
sw.WriteLine (s);
s = Console.ReadLine ();
}
sw.Close();
}
FUOC P08/B0036/01628
30
Aparte de las utilidades para streams, el namespaceSystem.IO contiene algunas clases que permiten la inspeccin de directorios y ficheros, y la manipulacin de los mismos:
Directory. Ofrece mtodos estticos para realizar operaciones sobre directorios, entre otros:
DirectoryInfo. Representa un directorio. Incluye propiedades para consultar la informacin correspondiente, y mtodos para trabajar con l, entre ellos:
Path. Contiene miembros estticos para trabajar con strings que contienen
rutas o paths de directorios, de forma independiente del sistema de ficheros
utilizado. Entre otros encontramos los siguientes miembros:
31
FUOC P08/B0036/01628
Veamos un ejemplo de cmo hacer un recorrido de un directorio y sus subdirectorios, buscando ficheros con extensin .txt y moviendo estos ficheros a la
carpeta C:\TEMP del disco, renombrndolos para evitar colisiones:
public void MoverTXTaTEMP(string dir)
{
MoverTXTaTEMP_rec (new DirectoryInfo (dir));
}
Actividad 9
Ejecutad las siguientes acciones:
Abrid un fichero de texto y escribid una secuencia de caracteres introducida por el usuario. Al final cerrad el fichero.
FUOC P08/B0036/01628
32
4. XML (System.Xml)
La clase XmlReader es una clase abstracta que sirve como base para otras clases ms especficas que permiten leer documentos XML en distintos formatos,
como por ejemplo las clases XmlTextReader (permite leer documentos XML
desde ficheros de texto), XmlNodeReader (permite leer documentos en formato DOM (ver siguiente apartado)), o XmlValidatingReader (permite leer
documentos y validarlos a la vez (ver apartado de validacin de documentos
XML).
No obstante, la clase XmlReader contiene el mtodo esttico Create, que
permite crear una instancia de una de las subclases en funcin de los parmetros de configuracin especificados. En el siguiente ejemplo, se muestra cmo
crear una instancia de XmlReader que lea un documento XML desde un fichero de texto. Al finalizar el proceso sobre el documento, cerramos el objeto
XmlReader mediante el mtodo Close:
XmlReader xr = XmlReader.Create("fichero.xml");
xr.Close();
33
FUOC P08/B0036/01628
case XmlNodeType.Comment:
// acciones en caso de que sea un nodo
// de tipo comentario
break;
...
}
}
Uno de los tipos de nodo que devuelve el mtodo Read es el nodo Whitespace, que representa un espacio en blanco en el documento XML. Esto se debe
a que por defecto se tratan todos los espacios en blanco. Para tratar solamente
aquellos espacios en blanco que son significativos (por ejemplo espacios en
blanco dentro de un texto), debemos cambiar el valor de la propiedad WhitespaceHandling del XmlReader:
xr.WhitespaceHandling = WhitespaceHandling.Significant;
Para acceder a los atributos de un determinado nodo, utilizamos el mtodo
GetAttribute, pudiendo especificar el nombre del atributo que queremos
recuperar, o la posicin que ocupa, como en el siguiente ejemplo, en el que se
muestra por pantalla el valor de los atributos del nodo actual:
for (int i=0;i<xr.AttributeCount;i++)
{
Console.WriteLine (xr.GetAttribute (i));
FUOC P08/B0036/01628
34
4.1.2.
El mtodo Create de la clase XmlWriter acepta adems un parmetro opcional de tipo XmlWriterSettings, que permite especificar ciertos parmetros
de escritura. La escritura de elementos al documento XML se lleva a cabo mediante los diferentes mtodos Write de la clase XmlWriter:
Direccin web
Ms informacin acerca
de las clases XmlReader y
XmlWriter en las siguientes
direcciones:
<http://
msdn2.microsoft.com/
en-us/library/
9d83k261(VS.80).aspx>
<http://
msdn2.microsoft.com/
en-us/library/
4d1k42hb(VS.80).aspx>
FUOC P08/B0036/01628
35
<OtroElemento nombreatributo="valor">
Esto es el contenido del elemento
</OtroElemento>
</ElementoRaiz>
Direccin web
DOM es una recomendacin del W3C: <http://
www.w3.org/DOM/>
Estructura de DOM
DOM organiza el documento en forma de rbol2. Cada nodo del rbol corresponde con uno de los elementos del documento. A diferencia de los nodos
utilizados por las clases XmlReader y XmlWriter, los nodos de DOM incluyen el elemento completo (tag de inicio, contenido y tag final). Cada nodo
tiene un nico nodo padre (excepto el nodo raz), y de 0 a N nodos hijos, correspondientes al contenido del elemento que representa. Los nodos sin hijos
se denominan hojas del rbol.
La funcionalidad de DOM se encuentra dentro del namespaceSystem.Xml.
Las clases ms importantes de DOM son las siguientes:
(2)
FUOC P08/B0036/01628
36
La clase central de DOM es el XmlNode, ya que representa cada uno de los nodos del rbol. El resto de elementos (XmlDocument, XmlAttribute, XmlElement, XmlComment, XmlText, etc.) heredan de XmlNode. Esta clase tiene
diferentes propiedades y mtodos para acceder a los datos del nodo del rbol
que representa. A continuacin, se muestran algunos de los ms importantes:
InnerText. Devuelve un string que contiene el valor del nodo concatenado con el contenido de sus nodos hijos, de forma recursiva.
NodeType. Indica el tipo de nodo. Los valores posibles son los especificados en la enumeracin XmlNodeType, entre ellos: Attribute, CDATA,
Comment, Element, Whitespace, etc.
SelectNodes. Devuelve una lista de nodos que cumplen una determinada condicin de bsqueda XPath. Veremos XPath en un apartado posterior dentro de este mismo tema.
A continuacin, veremos cmo utilizar algunas de estas propiedades y mtodos para manipular documentos XML.
4.2.2.
37
FUOC P08/B0036/01628
string x = "<parking>" +
"<coche color=\"ROJO\">" +
"<marca>SEAT</marca>" +
"<modelo>IBIZA</modelo>" +
"</coche>" +
"</parking>";
4.2.3.
Otra forma de navegar por una estructura DOM es buscando elementos concretos por nombre, mediante el mtodo GetElementsByTagName de la clase
XmlNode. Este mtodo devuelve un XmlNodeList que contiene todos los no-
FUOC P08/B0036/01628
38
dos correspondientes a los elementos con el nombre especificado, que se encuentran dentro del elemento correspondiente al nodo sobre el que se ejecuta
el mtodo, por ejemplo:
node.GetElementsByTagName ("coche");
La instruccin anterior devuelve todos los nodos de los elementos coche que
se encuentran dentro del elemento representado por el nodo node.
Finalmente, existe otra forma de navegar por un documento XML, que consiste en acceder directamente a los nodos que nos interesa, utilizando algn
mecanismo de bsqueda de nodos como XPath o XQuery. Veremos estas dos
tcnicas en otro apartado.
4.2.4.
Una vez situados en un nodo, podemos consultar sus datos mediante las propiedades que comentamos anteriormente. El siguiente ejemplo ilustra cmo
mostrar la marca el modelo y el color de todos los coches del documento XML:
XmlNodeList parking = doc.GetElementsByTagName ("coche");
Tanto la marca como el modelo son elementos anidados dentro del elemento coche, por lo que accedemos a ellos mediante la propiedad ChildNodes
del nodo coche, y utilizamos la propiedad Value para obtener su valor. En
cambio, el color del coche es un atributo, por lo que utilizamos la propiedad
Attributes para acceder a l.
4.2.5.
La modificacin de un documento mediante DOM consiste en introducir, eliminar o cambiar nodos en el rbol. Estas operaciones se pueden llevar a cabo
mediante los diferentes mtodos de la clase XmlNode que comentamos anteriormente.
Para borrar un nodo hijo, utilizamos el mtodo RemoveChild. El ejemplo siguiente borra el elemento marca del elemento coche representado por la variable coche:
coche.RemoveChild (coche.ChildNodes[0]);
FUOC P08/B0036/01628
39
FUOC P08/B0036/01628
40
4.2.6.
Donde URI-namespace es el URI correspondiente al namespace y URLesquema la direccin en la que se encuentra el esquema. La instruccin
xsi:schemaLocation enlaza el contenido del documento que est cualifica-
FUOC P08/B0036/01628
41
do por el namespaceURI-namespace, con el esquema URL-esquema, es decir, el contenido cualificado por el namespaceURI-namespace se validara con
respecto al esquema URL-esquema.
En este caso, puede haber tantas definiciones xsi:schemaLocation como
namespaces tenga definidos el documento a validar, incluso se puede especificar la definicin xsi:noNamespaceSchemaLocation para enlazar el contenido del documento que no est cualificado por ningn namespace con un
esquema.
Al enlazar el contenido cualificado por un namespace con un esquema, es necesario especificar que el esquema se aplica a ese namespace, mediante el atributo targetNamespace que comentbamos anteriormente:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="URI-namespace"
elementFormDefault="qualified">
La clase XmlReader permite validar los documentos XML en paralelo a su lectura. En realidad, la clase que se utiliza internamente para realizar la validacin es la clase XmlValidatingReader, que hereda de la clase XmlReader.
Para realizar la validacin de un documento, en primer lugar se crea una instancia de la clase XmlSchema, asignando la url del fichero que contiene el
schema xsd a la propiedad SourceUri de la misma:
XmlSchema s = new XmlSchema ();
s.SourceUri = "esquema.xsd";
FUOC P08/B0036/01628
42
Para especificar la lista de esquemas que se aplican sobre el documento, se utiliza la clase XmlSchemaSet (el tipo de la propiedad settings.Schemas). A
este conjunto de esquemas XML se pueden aadir nuevas instancias de XmlSchema mediante el mtodo Add, como vemos en el ejemplo. Una vez aadidos
todos los esquemas al XmlSchemaSet, es necesario llamar al mtodo Compile
para que se procesen los esquemas aadidos.
Finalmente, creamos una instancia de la clase XmlReader, indicando el nombre del fichero XML a leer y pasando como segundo parmetro la instancia de
XmlReaderSettings creada:
XmlReader reader = XmlReader.Create ("in.xml", settings);
Mediante esta instancia de XmlReader podemos leer el documento. A medida
que avanzamos en su lectura, se va realizando tambin la validacin:
while(reader.Read())
{
// procesado del fichero
// el documento se valida en paralelo
}
reader.Close();
Direccin web
Ms informacin acerca de
la validacin de documentos
XML en .NET en la siguiente
direccin Web:
<http://
msdn2.microsoft.com/en-us/
library/hdf992b8.aspx>
settings.ValidationEventHandler +=
new ValidationEventHandler(set_ValidationEventHandler);
FUOC P08/B0036/01628
43
4.4. XPath
XPath es un lenguaje que se utiliza conjuntamente con otras tecnologas como XQuery o XSLT. Por otro lado, XPath tambin es til para buscar nodos
dentro de un rbol DOM que cumplan una determinada condicin. Para ello,
utilizamos el mtodo SelectNodes de la clase XmlNode:
XmlNodeList nl = nodo.SelectNodes (expression-XPath);
El siguiente ejemplo muestra cmo hacer un listado de los coches del parking
que son de color verde:
XmlDocument doc = new XmlDocument ();
doc.Load ("parking.xml");
XmlNodeList nl = doc.SelectNodes("//coche[@color='verde']");
FUOC P08/B0036/01628
44
nav.AppendChild("<coche color='azul'></coche>");
nav.MoveToChild("coche", "");
nav.AppendChild("<marca>SEAT</marca>");
FUOC P08/B0036/01628
45
nav.AppendChild("<modelo>LEON</modelo>");
doc.Save("out.xml");
XmlWriter xw = nav.AppendChild();
xw.WriteStartElement("coche");
xw.WriteAttributeString("color", "azul");
xw.WriteStartElement("marca");
xw.WriteString("SEAT");
xw.WriteEndElement();
xw.WriteStartElement("modelo");
xw.WriteString("LEON");
xw.WriteEndElement();
xw.WriteEndElement();
xw.Close();
doc.Save("out.xml");
FUOC P08/B0036/01628
46
s.ConformanceLevel = ConformanceLevel.Fragment;
writer.Close();
FUOC P08/B0036/01628
47
Recurso web
Se puede encontrar ms informacin acerca del uso de
transformaciones XSLT en
.NET en la siguiente direccin:
<http://
msdn2.microsoft.com/en-us/
library/14689742.aspx>
FUOC P08/B0036/01628
48
System.Reflection. Las clases de este namespace permiten inspeccionar metadatos de ensamblados e invocar mtodos, en tiempo de ejecucin.
System.Data. Este namespace del .NET Framework contiene la funcionalidad de ADO.NET para acceder a fuentes de datos.
System.Security. Dentro de este namespace encontramos diferentes funcionalidades relacionadas con la seguridad: gestin de permisos, criptografa,
etc.
FUOC P08/B0036/01628
49
Actividades
1.Ejecutadlassiguientesacciones:
Cread un mtodo sumar, que reciba dos parmetros de tipo object, convierta los dos
parmetros a tipo entero y devuelva la suma de nuevo como object.
Cread un mtodo que calcule el volumen de una esfera, indicando el radio como par-
2.Ejecutadlassiguientesacciones:
Cread un mtodo que reciba un parmetro de tipo object, que convierta ese objeto en
un string.
Cread un mtodo que calcule el reverso de una cadena de caracteres (que de la vuelta a
la secuencia de caracteres).
Cread un mtodo que devuelva la vocal que aparece ms veces en una cadena de caracteres.
Cread el mtodo PrimeraLetraEnMayusculas que reciba un string como parmetro
y que devuelva este mismo string poniendo en maysculas la primera letra de cada
palabra y en minsculas el resto de caracteres.
Reescribid el mtodo que calcula el reverso de un string pero con la clase StringBuilder, de forma que la inversin se realice en la misma cadena que se pasa como parmetro.
3.Ejecutadlassiguientesacciones:
Cread el mtodo DiasTotales que calcule el nmero de das que han pasado desde el
inicio del calendario hasta una fecha indicada como parmetro.
Cread el mtodo FechaFinal que reciba como parmetro un objeto DateTime y un
objeto TimeSpan, y que devuelva el DateTime correspondiente a sumar la fecha y el
intervalo de tiempo especificados.
4.Ejecutadlassiguientesacciones:
Cread el mtodo SumarATodos que sume a todas las posiciones de un array de enteros,
un valor indicado.
Cread el mtodo ReverseMatrix, que invierta una matriz de enteros rectangular de 2
dimensiones, es decir, que devuelva una matriz en la que las filas de la matriz inicial
pasen a ser las columnas de la nueva y las columnas las filas.
5.Ejecutadlassiguientesacciones:
Cread un ArrayList e insertar varios elementos de tipo string.
Insertad un elemento en la posicin 1 de la coleccin anterior.
Cread un Hashtable e insertad varios pares <string, DateTime>.
Eliminad uno de los elementos de la coleccin anterior.
Cambiad las colecciones anteriores por sus correspondientes colecciones genricas.
6.Ejecutadlassiguientesacciones:
Escribid el mtodo EscribirString que reciba dos string como parmetro. El primer
string indica el nombre de un fichero que se quiere crear o sobrescribir, y el segundo
indica la cadena de caracteres que se quiere grabar en el fichero.
Escribid el mtodo LeerString que devuelva un string con el contenido del fichero
indicado como parmetro.
Escribid el mtodo Buscar con dos parmetros de tipo string. El primer parmetro
indica un path a partir del cual se quiere realizar la bsqueda. El segundo indica una
cadena de caracteres que se quiere buscar. El mtodo debe devolver el nmero de veces
que aparece la cadena indicada en el segundo parmetro en los nombres de ficheros y
directorios incluidos dentro del directorio indicado en el primer parmetro (incluidas
subcarpetas).
7.Ejecutadlassiguientesacciones:
Aadid el campo coches de tipo ArrayList a la clase Conductor.
Aadid nuevos elementos Coche a la coleccin anterior.
Eliminad un elemento de la coleccin.
Insertad un elemento en una posicin concreta de la coleccin.
Cambiad el ArrayList por un HashTable. Reescribid las instrucciones de los apartados
2, 3 y 4 para esta nueva coleccin.
8.Ejecutadlassiguientesacciones:
Implementad el tipo genrico cola de pares <T, S>, es decir, una cola en la que en cada
posicin se almacena un struct que contiene un campo de tipo T y otro de tipo S.
FUOC P08/B0036/01628
50
9.Ejecutadlassiguientesacciones:
Abrid un fichero de texto y escribid una secuencia de caracteres introducida por el usuario. Al final cerrad el fichero.
Abrid el fichero creado en el apartado anterior y mostrad su contenido por pantalla.
FUOC P08/B0036/01628
51
Bibliografa
MSDM Visual Studio 2005 Developer Center. "Reading XML with the XmlReader". .NET
Framework Developer's Guide.
http://msdn2.microsoft.com/en-us/library/9d83k261(VS.80).aspx
MSDN Visual Studio 2005 Developer Center. "Validating XML Data with XmlReader".
.NET Framework Developer's Guide.
http://msdn2.microsoft.com/en-us/library/hdf992b8.aspx
MSDN Visual Studio 2005 Developer Center. "Writing XML with the XmlWriter". .NET
Framework Developer's Guide.
http://msdn2.microsoft.com/enus/library/4d1k42hb(VS.80).aspx
MSDN Visual Studio 2005 Developer Center. " XSLT Transformations". .NET Framework
Developer's Guide.
http://msdn2.microsoft.com/en-us/library/14689742.aspx
Nagel, C.; Evjen, B.; Glynn, J. y otros (2005). Professional C# with 3.0. Wrox.
Wigley, A.; Wheelwright, S. (2003) .NET Compact Framework Core Reference. MSPress.
W3C. Arquitecture Domain.Document Object Model (DOM).
http://www.w3.org/DOM/
.NET Compact Framework Developer Center
http://msdn.microsoft.com/netframework/programming/netcf/default.aspx
.NET Framework Developer's Guide
http://msdn2.microsoft.com/en-us/library/f44bbwa1.aspx
.NET Compact Framework QuickStart Tutorial
http://samples.gotdotnet.com/quickstart/CompactFramework/