FANDOM


XML de trabajoEditar

El siguiente documento XML será utilizado en las secciones de este capítulo:

<?xml version="1.0" encoding="iso-8859-15"?>
<pelicula titulo="Brazil" estreno="1985" minutos="132">
	<direccion>
		<director nombre="Terry" apellidos="Gilliam"/>
	</direccion>
	<produccion>
		<productor nombre="Patrick" apellidos="Cassavetti"/>
		<productor nombre="Arnon" apellidos="Milchan"/>
	</produccion>
	<guion>
		<guionista nombre="Terry" apellidos="Gilliam"/>
		<guionista nombre="Tom" apellidos="Stoppard"/>
		<guionista nombre="Charles" apellidos="McKeown"/>
	</guion>
	<reparto>
		<interprete nombre="Jonathan" apellidos="Pryce"
			papel="protagonista"/>
		<interprete nombre="Robert" apellidos="De Niro"
			papel="protagonista"/>
		<interprete nombre="Kim" apellidos="Greist"
			papel="protagonista"/>
		<interprete nombre="Michael" apellidos="Palin"
			papel="secundario"/>
		<interprete nombre="Ian" apellidos="Holm"
			papel="secundario"/>
		<interprete nombre="Bob" apellidos="Hoskins"
			papel="secundario"/>
	</reparto>
	<esloganes>
		<eslogan>
			Vuelos fantásticos.
			La pesadilla de la realidad.
			Ataques terroristas.
			Compras a media noche.
			Amor verdadero.
			Y fontanería creativa.
		</eslogan>
	</esloganes>
</pelicula>

Carga de un documento XMLEditar

El siguiente programa sirve para cargar un documento XML:

using System;
using System.Xml;
 
class MainClass
{
	public static void Main(string[] args)
	{
		string sRuta = "c:\\xml\\";
		// string sRuta = "/home/andy/xml/";
 
		try
		{
			XmlDocument doc = new XmlDocument();
			doc.PreserveWhitespace = true;
			doc.Load(sRuta + "brazil.xml");
			Console.Write(doc.InnerXml);
		}
 
		catch(Exception e)
		{
			Console.WriteLine("Error: '{0}'", e);
		}
 
		Console.Write("Pulse una tecla para continuar...");
		Console.ReadKey(true);
	}
}

Dependiendo de si se utiliza Windows o Linux, será necesario cambiar el comentario de las líneas en las que se asigna un valor a sRuta.

Movimiento en verticalEditar

El movimiento en vertical es uno de los más utilizados. Dado un determinado nodo, mediante una serie de métodos podemos acceder a sus hijos y, a partir de ahí, a los hijos de estos y así sucesivamente. El siguiente es un ejemplo de ello:

using System;
using System.Xml;
 
class MainClass
{
	public static void Main(string[] args)
	{
		string sRuta = "c:\\xml\\";
		// string sRuta = "/home/andy/xml/";
 
		try
		{
			XmlDocument doc = new XmlDocument();
			// doc.PreserveWhitespace = true;
			doc.Load(sRuta + "brazil.xml");
 
			foreach(XmlNode node in doc.DocumentElement.ChildNodes)
			{
				Console.WriteLine(node.Name);
			}
		}
 
		catch(Exception e)
		{
			Console.WriteLine("Error: '{0}'", e);
		}
 
		Console.Write("Pulse una tecla para continuar...");
		Console.ReadKey(true);
	}
}

El resultado: la lista de elementos de primer nivel que componen el documento XML. De igual forma, podemos mostrar también los nombres de los elementos de segundo nivel, es decir, los hijos de los elementos anteriores:

using System;
using System.Xml;
 
class MainClass
{
	public static void Main(string[] args)
	{
		string sRuta = "c:\\xml\\";
		// string sRuta = "/home/andy/xml/";
 
		try
		{
			XmlDocument doc = new XmlDocument();
			doc.Load(sRuta + "brazil.xml");
 
			foreach(XmlNode nodo in doc.DocumentElement.ChildNodes)
			{
				Console.WriteLine(nodo.Name);
				foreach(XmlNode nodo2 in nodo.ChildNodes){
					Console.WriteLine("\t" + nodo2.Name);
				}
			}
		}
 
		catch(Exception e)
		{
			Console.WriteLine("Error: '{0}'", e);
		}
 
		Console.Write("Pulse una tecla para continuar...");
		Console.ReadKey(true);
	}
}

Y así, sucesivamente.

Movimiento en horizontalEditar

Además de en vertical (de padres a hijos) también es posible moverse en horizontal (entre hermanos). El siguiente es un ejemplo de este tipo de movimiento:

using System;
using System.Xml;
 
class MainClass
{
	public static void Main(string[] args)
	{
		string sRuta = "c:\\xml\\";
		// string sRuta = "/home/andy/xml/";
 
		try
		{
			XmlDocument doc = new XmlDocument();
			doc.Load(sRuta + "brazil.xml");
 
			XmlNode nodo = doc.DocumentElement.FirstChild;
			do
			{
				Console.WriteLine(nodo.Name);
				nodo = nodo.NextSibling;
			}
			while(nodo != null);
		}
 
		catch(Exception e)
		{
			Console.WriteLine("Error: '{0}'", e);
		}
 
		Console.Write("Pulse una tecla para continuar...");
		Console.ReadKey(true);
	}
}

Propiedades de los nodosEditar

Gracias al uso de DOM podemos obtener las propiedades de cada nodo. Por ejemplo, las siguientes:

  • Attributes.
  • BaseURI.
  • HasChildNodes.
  • InnerText.
  • InnerXml.
  • Name.
  • NodeType.
  • OuterXml.
  • ParentNode.
  • Value.

Podemos ver cómo obtener sus valores en el siguiente ejemplo:

using System;
using System.Xml;
 
class MainClass
{
	public static void Main(string[] args)
	{
		string sRuta = "c:\\xml\\";
		// string sRuta = "/home/andy/xml/";
 
		try
		{
			XmlDocument doc = new XmlDocument();
			doc.Load(sRuta + "brazil.xml");
 
			foreach(XmlNode nodo in doc.DocumentElement)
			{
				if(nodo.Name == "reparto")
				{
					Console.WriteLine("BaseURI: " + nodo.BaseURI);
					Console.WriteLine("HasChildNodes: " +
					                  nodo.HasChildNodes);
					Console.WriteLine("InnerText: " + nodo.InnerText);
					Console.WriteLine("InnerXml: " + nodo.InnerXml);
					Console.WriteLine("Name: " + nodo.Name);
					Console.WriteLine("NodeType: " + nodo.NodeType);
					Console.WriteLine("OuterXml: " + nodo.OuterXml);
					Console.WriteLine("ParentNode: " +
					                  nodo.ParentNode.Name);
				}
			}
		}
 
		catch(Exception e)
		{
			Console.WriteLine("Error: '{0}'", e);
		}
 
		Console.Write("Pulse una tecla para continuar...");
		Console.ReadKey(true);
	}
}

Acceso directoEditar

Es posible acceder a un elemento en concreto dentro de un documento XML y mostrar sus propiedades. El siguiente ejemplo muestra cómo hacerlo con el elemento /pelicula/reparto:

using System;
using System.Xml;
 
class MainClass
{
	public static void Main(string[] args)
	{
		string sRuta = "c:\\xml\\";
		// string sRuta = "/home/andy/xml/";
 
		try
		{
			XmlDocument doc = new XmlDocument();
			doc.Load(sRuta + "brazil.xml");
 
			XmlNode nodo =
				doc.DocumentElement.SelectSingleNode("/pelicula/reparto");
			Console.WriteLine("BaseURI: " + nodo.BaseURI);
			Console.WriteLine("HasChildNodes: " + nodo.HasChildNodes);
			Console.WriteLine("InnerText: " + nodo.InnerText);
			Console.WriteLine("InnerXml: " + nodo.InnerXml);
			Console.WriteLine("Name: " + nodo.Name);
			Console.WriteLine("NodeType: " + nodo.NodeType);
			Console.WriteLine("OuterXml: " + nodo.OuterXml);
			Console.WriteLine("ParentNode: " + nodo.ParentNode.Name);
		}
 
		catch(Exception e)
		{
			Console.WriteLine("Error: '{0}'", e);
		}
 
		Console.Write("Pulse una tecla para continuar...");
		Console.ReadKey(true);
	}
}

Enlaces interesantesEditar

Puede que encuentres interesantes los siguientes enlaces:

El contenido de la comunidad está disponible bajo CC-BY-SA a menos que se indique lo contrario.