Solo Programadores #163

Page 27

24-28 REDES CROSS BROWER.qxd:REDES-RSS Java 1

24/7/08

13:10

Página 27

REDES

Aplicaciones Web con AJAX correspondiente resulta más sencilla. Simplemente se utiliza el constructor del objeto y después con el método importStylesheet se asigna la hoja XSLT:

} catch (e) { oXSLTProcessor = null; } if (oXSLTProcessor!=null) {

var oXSLTProcessor = null;

XSLTProcessorFactory.XSLTProcessor

try {

Creator = oXSLTProcessorCreator;

oXSLTProcessor = new

}

XSLTProcessor();

}

oXSLTProcessor.importStylesheet

EL OBJETO Transformer

(oXSLTDom); } catch (e) { oXSLTProcessor = null;

Aplicación en Internet Explorer.

} if (oXSLTProcessor!=null) { ··· } else { return null; }

El objeto devuelto, que al igual que en la función para Internet Explorer se crea usando notación JSON, cuenta con la propiedad oXSLTProcessor y con el método transform. La transformación se lleva a cabo con el método transformToFragment, que devuelve un fragmento de código HTML en forma de objeto del DOM correspondiente a la página HTML. El segundo parámetro de transformToFragment es el objeto document correspondiente al DOM de la página porque el fragmento resultante tiene que crearse precisamente sobre la página para que pueda utilizarse en la página. El elemento HTML que recibe la transformación se “vacía” asignando la cadena vacía a su propiedad innerHTML y se actualiza con appendChild: return {

EL MÉTODO newXSLTProcessor

oOutputElement) { var oFrag = this.oXSLTProcessor.transformTo

function Transformer(sXsltUrl) { this.sXsltUrl = sXsltUrl;

El método newXLSTProcessor se encarga de crear una nueva instancia de un objeto que sirva para utilizar las hojas XSLT con independencia del navegador. Si la propiedad XSLTProcessorCreator es null significa que es la primera vez que se ejecuta y que por lo tanto es necesario encontrar cuál de las funciones definidas en el array arrXSLTProcessorCreators es la que vale; en otro caso simplemente se ejecuta dicha función: var oXSLTProcessor=null; if (XSLTProcessorFactory.XSLTProcessor Creator==null) { ··· } else { oXSLTProcessor = XSLTProcessorFactory. XSLTProcessorCreator(oXSLTDom); } return oXSLTProcessor;

oXSLTProcessor: oXSLTProcessor, transform: function(oXMLDom,

El objeto Transformer se define tal y como sigue:

La búsqueda de la funcion es muy simple. Se recorre el array y se ejecutan una a una las funciones hasta que una devuelve un valor distinto de null. Entonces se actualiza el valor de XSLTProcessorCreator:

Fragment(oXMLDom, document);

this.oReadyStateListener = null; this.oXSLTProcessor = null; this.oOutputElement = null; };

Transformer.prototype = { ··· }

El constructor recibe como parámetro la URL de la hoja XSLT y establece una propiedad con este valor, y otras tres propiedades más: oReadyStateListener, que almacenará la función que el objeto Tranformer ejecuta cuando está listo para empezar a hacer transformaciones; oXSLTProcessor, el objeto devuelto por el método newXSLTProcessor del objeto XSLTProcessorFactory; y oOutputElement, que es el elemento de la página HTML que se actualizará con la transformación. Obsérvese que el propósito del objeto Transformer es que con la misma hoja XSLT se puedan hacer transformaciones de varios documentos XML. Los métodos del objeto Transformer se establecen utilizando la propiedad prototype: load: function() {···},

var oXSLTProcessorCreator=null;

setReadyStateListener:

for (var i=0;

function(oReadyStateListener) {···},

i<XSLTProcessorFactory.arrXSLT

fireReadyStateListener: function()

ProcessorCreators.length &&

{···},

XSLTProcessorFactory.XSLTProcessor

xsltDataListener: function(oXSLTDom)

Creator==null; i++) {

{···},

oXSLTProcessorCreator =

loadAndTransform: function(sXmlUrl,

XSLTProcessorFactory.arrXSLT

oOutputElement) {···},

ProcessorCreators[i];

xmlDataListener: function(oXmlAsDom)

oOutputElement.innerHTML = “”; oOutputElement.appendChild(oFrag); } };

El objetivo final de las dos funciones que se han estudiado es proporcionar un objeto que sirva para realizar las transformaciones con XSLT y que soporte las diferencias entre los navegadores de forma transparente. De ahí que se haya encapsulado la funcionalidad correspondiente a la transformación dentro de un objeto JSON. www.revistasprofesionales.com

try {

{···}

oXSLTProcessor = oXSLTProcessorCreator(oXSLTDom);

El método load carga de forma asíncrona la hoja XSLT utilizando una llamada AJAX. 27

SOLO PROGRAMADORES nº 163


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.