XmlTextWriter... pero para javascript



Estoy tratando de hacer un chat para ASP.NET desde hace unas semanas. Comencé con la idea de algo "sencillito"... pero claro, se te van ocurriendo cosas y ya me he puesto totalmente en serio a hacer el mejor chat para ASP.NET que yo sepa hacer .

La idea es que cualquiera pueda tener un chat en su página, aplicación, intranet o lo que sea sin más que arrastrar y hacer los cambios de estilo que el webmaster crea oportuno.

La cosa es que mi primera decisión importante fue usar AJAXbyMe, es decir, que no se usara en ningún momento AjaxPRO.NET, ASP.NET AJAX (ex-Atlas) o cualquier otro framework AJAX. De ese modo independizo totalmente al webmaster de ellos.

La cosa es que poniéndome poco a poco me estoy fabricando mi propio framework AJAX (prometo publicarlo y hacerlo libre más adelante, por si a alguien le interesa)... y entre otras cosas me molestaba crear ficheros XML con javascript, pues lo que valía para Internet Explorer, no valía para Firefox y viceversa... Por cierto, lo de los ficheros XML es por aquello de enviar y recibir info mediento un XmlHttpRequest con un XML como Dios manda y mediante POST.

... así que decidí crear la clase XmlTextWriter para javascript. De modo que las funcionalidades más usadas del XmlTextWriter de ASP.NET fueran sintácticamente muy similares (por no decir idénticas) a las de esta mini-librería.

Eso sí, la librería es muy sencillita, y muy ampliable (el que se anime a ampliarlo que lo haga y lo publicamos aquí!!!), por lo que no esperéis magia!! Sólo lo básico.

Sólo con poneros un ejemplo de código veréis lo que quiero decir:

    var miXML = new XmlTextWriter();
    miXML.Formatting = true;
   
    miXML.WriteStartDocument();
    miXML.WriteStartElement("myXML");
            miXML.WriteStartElement("persona");
                miXML.WriteAttributeString("Id", "1");
                miXML.WriteStartElement("nombre");
                    miXML.WriteValue("David");
                miXML.WriteEndElement();
                miXML.WriteElementString("Apellidos", "Villa");
            miXML.WriteEndElement();
            miXML.WriteStartElement("persona");
                miXML.WriteStartElement("nombre");
                    miXML.WriteAttributeString("Id", "2");
                    miXML.WriteCDATA("Samuel");
                miXML.WriteEndElement();
                miXML.WriteElementStringCDATA("Apellidos", "Etoo");
            miXML.WriteEndElement();           
        miXML.WriteEndElement();
        miXML.WriteElementString("Vacío");
    miXML.WriteEndElement();
    miXML.WriteEndDocument();


¿Qué es código en javascript o código en ASP.NET?

Como sabéis de otros dos artículos de XmlTextWriter para ASP.NET (XmlTextWriter y XmlTextWriter en un StringBuilder), la única diferencia se encuentra a la hora de declarar la variable XmlTextWriter... que paradójicamente es más sencilla de declarar con javascript

Como os comentaba, la mayoría de la librería es un calco de las propiedades y métodos del análogo para .NET, pero además hay otras funciones y métodos que deberíais conocer. A continuación os digo como accederlas (siguiendo el ejemplo) y qué son:

- miXML.xml: es el propio xml en formato texto raso, tal cual.
- miXML.escapeXML: devuelve miXML.xml como UrlEncode, y es ideal para enviar al servidor (ahí debe leerse con UrlDecode).
- miXML.parseXML: devuelve el xml pero como objeto xml para javascript (funciona para todos los navegadores).
- miXML.WriteElementStringCDATA("nombreElemento", "contenido"): es lo mismo que el WriteElementString, sólo que el contenido lo escribe como CDATA.

Hay otras funciones que no he sabido hacer privadas (¿¿se pueden declara métodos y propiedades privadas en una "clase" javascript??), y por tanto acceder, aunque no creo que os sirvan para mucho

Pues lo dicho, aquí tenéis la mini-librería javascript: