¿Que es XML?
XML, es un lenguaje basado en los principios de HTML, tags que permiten dar formato a un texto o sirven para hacer referencia al mismo. XML es la sigla del inglés eXtensible Markup Language (lenguaje de marcado ampliable o extensible) desarrollado por el World Wide Web Consortium (W3C). [1]
XML es un lenguaje de transferencia de información, pensado para crear una sintaxis única que pueda usar cualquier programa para leer archivos de otro mediante un estándar.
Ejemplos del uso de XML
Un ejemplo del uso de XML lo podemos ver en los webservices, feeds, podcast, etc. Pero no es lo único que puede hacerse, es un lenguaje muy verstatil y permite la manipulación de datos sin importar el origen. Un muy buen proyecto que usa dicha tecnología es NHibernate, hermano mayor de Hibernate de Java pero pensado para usarse con .NET (más adelante haré un ejemplo de esta herramienta depersistencia).
Ahora un pequeño ejemplo de lo que se puede hacer, tenemos un archivo formado de la siguiente manera:
<question>
<desc> ¿Cuál es la capital de méxico?</desc>
<answer>
<ok>México DF</ok>
<bad>Hidalgo</bad>
<bad>Texas</bad>
</answer>
</question>
<question>
<desc>Indica a Unix que la línea de órdenes ha terminado</desc>
<answer>
<ok>Enter</ok>
<bad>Ctrl-d</bad>
<bad>Ctrl-a</bad>
</answer>
</question>
<question>
<desc>Termina la sesión con Unix de un usuario ordinario</desc>
<answer>
<ok>Ctrl-d</ok>
<bad>Ctrl-e</bad>
<bad>Enter</bad>
</answer>
</question>
<question>
<desc>Detiene la impresión de un fichero por pantalla</desc>
<answer>
<ok>Ctrl-s</ok>
<bad>Ctrl-x</bad>
<bad>Ctrl-z</bad>
</answer>
</question>
Todo elemento cuyo principio se marca con una etiqueta inicial, debe marcarse con una etiqueta final que repita el nombre del elemento, expresado igual que en la etiqueta inicial. El texto contenido entre la etiqueta inicial y la etiqueta final se llama contenido del elemento. Un elemento sin contenido puede tomar una forma especial.
<nombre></nombre>
Un tag puede tener varios, uno o ningún atributo. En los nombres de atributo pueden utilizarse los mismos caracteres permitidos que en los nombres de elemento. El nombre del atributo y su valor se separan con =. El valor del atributo debe darse entre apostrofes '...' o comillas dobles "..." . Si se usan comillas o apostrofes en el contenido del atributo, se utilizará el contrario como marcador.
<escorrecta></escorrecta>
<attributes attr="un valor"></attributes>
<values primero="1" segundo="2" tercero="333"></values>
<description caso1="Muestra's" caso2="Una expresion: Waxxxa! "></description>
Pueden aparecer comentarios en cualquier parte de un documento, fuera de las etiquetas. No puede incluirse la cadena "--" (dos guiones) dentro de un comentario.
Código mal formado:
<ejemplo>
</ejemplo>
<ejemplo>
</ejemplo>
<upgradelog>
<properties>
<property value="Logger"> </property>
</properties>
<event errorlevel="0" project="" source="Logger.sln" description="File successfully backed up as Backup\Logger.sln"> </event>
</upgradelog>
<ejemplo>
</ejemplo>
Trabajando XML desde Flash
Existen diversos manuales de flash que muestran como hacer la interacción entre el documento XML y el Flash[3][4] por lo que solo citaré las funciones que se requieren y una breve descripción.
Declaración de un objeto XML:
//Declara la variable "obj_xml" como un objeto XML
var obj_xml:XML = new XML();
otherXML = new XML("<state>California<city>san francisco</city></state>");
| XML.addRequestHeader() | Agrega o cambia las cabeceras HTTP para operaciones mediante POST. |
| XML.appendChild() | Agrega un nodo al final del objeto de la lista especificado. |
| XML.cloneNode() | Clona el nodo especificado, opcionalmente, clona todos los hijos recursivamente. |
| XML.createElement() | Crea un nuevo elemento XML. |
| XML.createTextNode() | Crea un nuevo nodo de texto XML. |
| XML.getBytesLoaded() | Regresa el número de bytes cargados para el documento XML especificado. |
| XML.getBytesTotal() | Regresa el tamaño del documento XML en bytes. |
| XML.hasChildNodes() | Regresa true si el nodo especificado tiene un nodo hijo; de otro modo regresa false. |
| XML.insertBefore() | Inserta un nodo enfrente del nodo especificado. |
| XML.load() | Carga un documento (especificamente un objeto CML) de una URL. |
| XML.parseXML() | Parsea un documento XML dentro del árbol del objeto XML. |
| XML.removeNode() | Remueve el nodo especificado del padre. |
| XML.send() | Envía el obejto especificado XML a una URL. |
| XML.sendAndLoad() | Envía el objeto especificado de XML a un URL y carga la respuesta del servidor en otro objeto de XML. |
| XML.toString() | Coviente el nodo especificado y cualquier hijo a texto XML. |
Propiedades de la clase XML
| XML.contentType | Indica el tipo de MIME transmitido al servidor. |
| XML.docTypeDecl | Asigna y regresa información sobre la declaración DOCTYPE de un documento XML. |
| XML.firstChild | De solo lectura; hace referencia al primer hijo de la lista de un nodo específico. |
| XML.ignoreWhite | Cuando es true, nodos con texto en blanco solamente, son descartados durante el proceso de parseo. |
| XML.lastChild | Hace referencia al último hijo de la lista del nodo especificado. |
| XML.loaded | De solo lectura; indica si el obejo XML especificado ha sido cargado. |
| XML.nextSibling | De solo lectura; hace referencia al siguiente hermano en la lista de nodos. |
| XML.nodeName | Nombre del nodo de un obejto XML. |
| XML.nodeType | EL tipo de nodo especificado (elemento o nodo de texto). |
| XML.nodeValue | El texto del nodo especificado si es un nodo de texto. |
| XML.parentNode | Solo lectura; hace referencia al nodo padre de un nodo especificado. |
| XML.previousSibling | De solo lectura; se refiere al hermano anterior a la lista del hijo del nodo del padre. |
| XML.status | Un código de estatus numérico indicando si se realizó o no la operación de parseo del codumento XML. |
| XML.xmlDecl | Información sobre la declaración de un documento XML. |
Colecciones para el documento XML.
| XML.attributes | Regresa un array que contiene todos los atributos del nodo especificado. |
| XML.childNodes | Solo lectura; regresa un array que contiene las referencias de los nodos hijos de un nodo. |
Eventos de la clase XML.
| XML.onData | Un manejador de eventos es invocado cuando el texto XML ha sido completamente cargado del servidor, o cuando un error ocurre al descargar un texto XML de un servidor. |
| XML.onLoad() | Un manejador de evento que retorna un valor boleano indicando si el obejto XML fué cargado exitosamente con XML.load() or XML.sendAndLoad(). |
Por el momento lo dejo hasta aquí y espero postear un ejemplo del tratado de XML desde flash porque hoy tengo algo de trabajo.
[1] http://es.wikipedia.org/wiki/XML
[2] http://www.w3.org/TR/html401/charset.html
[3] http://www.cristalab.com/tutoriales/12/tutorial-de-xml-en-flash-mx-2004
[4] http://flash-creations.com/notes/dynamic_xml.php
**Nota
#1 RE: Sobre XML y Flash
Good !
Algo que se antoja interesante es el manejar un documento XML con el .net, aunque como comentas es muy útil en varias circunstancias; se ha convertido en un estandard para el intercambio de información entre sistemas de distinto origen y/o plataforma.
Saludos !
AQ