Contenido

Convierte tus objetos a XML desde Javascript

28 dic

+ 3

Gracias a la propiedad prototype de los elementos Javascript podemos añadir funcionalidades extras a los objetos de los que disponemos en el navegador. Y aprovechandonos de ello podemos hacer cosas como añadir trim() a las cadenas de texto, indexOf() a los Array o xpath a $().

Ahora tambien podemos añadir el método toXML() a nuestros elementos, de tal forma que podremos convertir cualquier Array, Objeto o Cadena en un XML como si de un método propio se tratara.

Código

Array.toXml();
Array.prototype.toXml = function(t){
    var s = new Array(), i, l = this.length, v;
    var t2 = (t.charAt(t.length-1)=='s')?t.substring(0,t.length-1):t;

    for(i=0;i<l;i++){
        v = this[i];
        switch (typeof v) {
            case 'undefined':
            case 'function':
            case 'unknown':break;
            case 'object':if(v!=null){s.push(v.toXml(t2));}break;
            case 'string':v = v.toXml();
            default:s.push('<'+t2+'>'+v+'');
        }
    }
    if(s.length>1)return '<'+t+'>'+s.join('')+'';
    return s;
};
Object.toXml();
Object.prototype.toXml = function(t){
    var sa = new Array(''), se = new Array('');
    if(!t) t=this._tagName||'object';

    for(var i in this){
        if (this.hasOwnProperty(i) && i.charAt(0)!='_') {
            var v = this[i];
            switch (typeof v) {
                case 'undefined':
                case 'function':
                case 'unknown':break;
                case 'object':if(v!=null){se.push(v.toXml(i));}break;
                case 'string':v = v.toXml();
                default: sa.push(' '+i+'="'+v+'"');
            }
        }
    }
    var s = se.join('');
    return '<'+t+sa.join('')+((s!='')?'>'+s+'':'/>');
};
String.toXml();
String.prototype.toXml = function(){
    return this.replace('&','&amp;').
      replace('<','&lt;').replace('>','&gt;').
      replace('\'','&apos;').replace('"','&quot;');
};

Ejemplo de Uso

Ahora veamos un ejemplo de como convertir un array de objetos en un XML.


function Car(make,model,color){
    this.make  = make;
    this.model = model;
    this.color = color;
}

var cars = new Array();
cars.push(new Car('BMW','545i','Silver'));
cars.push(new Car('Toyota','Corrola','Red'));
cars.push(new Car('Honda','Accord','Black'));

alert(cars.toXml());

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.