mozilla
Los resultados de tu búsqueda

    SAX

    SAX (Simple API for XML, API simple para XML) es una API de análisis. SAX fue la primera API para XML ampliamente adoptada en Java y más tarde implementada en muchos otros entornos de programación. A partir de Firefox 2 es posible utilizar los analizadores SAX para aplicaciones y extensiones XUL. Para más información, veáse la página de SAX.


    Inicio rápido

    La funcionalidad de un analizador SAX está disponible a través del componente lector de XML. Para crear uno, utiliza el siguiente trozo de código:

    var xmlReader = Components.classes["@mozilla.org/saxparser/xmlreader;1"]
                              .createInstance(Components.interfaces.nsISAXXMLReader);
    

    Después de que hayas creado un analizador SAX, necesitarás asociar los manejadores de eventos que te interesen y arrancar el proceso de análisis. Todas las funcionalidades están disponible a través de la interfaz nsISAXXMLReader.


    Estableciendo los manejadores

    Los manejadores son objetos definidos por el usuario que implementan las interfaces de manejadores SAX y dependiendo de la clase de información que necesita obtener desde el analizador. Una vez comenzado el proceso de análisis, los manejadores asociados serán llamados por el analizador (callbacks) con el contenido de XML que está siendo analizado. Los siguientes manejadores están disponibles:

    Interfaz Propósito
    nsISAXContentHandler Es notificada sobre el contenido lógico de un documento (p.e.: elementos, atributos, espacios en blanco e instrucciones de proceso).
    nsISAXDTDHandler Es notificada sobre eventos básicos relacionados con DTDs.
    nsISAXErrorHandler Es notificada sobre errores en el flujo de entrada.
    nsISAXLexicalHandler Manejador ampliado de SAX2 para eventos léxicos (p.e.: comentarios y nodos de tipo CDATA, declaraciones DTD y entidades).

    A continuación se muestra un ejemplo de una implementación de un manejador de contenidos más comúnmente usado:

    function print(s) {
      dump(s + "\n");
    }
    
    xmlReader.contentHandler = {
      // nsISAXContentHandler
      startDocument: function() {
        print("startDocument");
      },
      
      endDocument: function() {
        print("endDocument");
      },
      
      startElement: function(uri, localName, qName, /*nsISAXAttributes*/ attributes) {
        var attrs = [];
        for(var i=0; i<attributes.length; i++) {
          attrs.push(attributes.getQName(i) + "='" + 
                     attributes.getValue(i) + "'");
        }
    
        print("startElement: namespace='" + uri + "', localName='" + 
              localName + "', qName='" + qName + "', attributes={" + 
              attrs.join(",") + "}");
      },
      
      endElement: function(uri, localName, qName) {
        print("endElement: namespace='" + uri + "', localName='" + 
              localName + "', qName='" + qName + "'");
      },
      
      characters: function(value) {
        print("characters: " + value);
      },
      
      processingInstruction: function(target, data) {
        print("processingInstruction: target='" + target + "', data='" + 
              data + "'");
      },
      
      ignorableWhitespace: function(whitespace) {
        // don't care
      },
      
      startPrefixMapping: function(prefix, uri) {
        // don't care
      },
      
      endPrefixMapping: function(prefix) {
        // don't care
      },
      
      // nsISupports
      QueryInterface: function(iid) {
        if(!iid.equals(Components.interfaces.nsISupports) &&
           !iid.equals(Components.interfaces.nsISAXContentHandler))
          throw Components.results.NS_ERROR_NO_INTERFACE;
        return this;
      }
    };
    

    Iniciar el análisis

    El componente XML Reader puede analizar XMLs a partir de una cadena de texto (un nsIInputStream) o asíncronamente a través de la interfaz nsIStreamListener. Abajo se muestra un ejemplo de análisis a partir de una cadena:

    xmlReader.parseFromString("<f:a xmlns:f='g' d='1'><BBQ/></f:a>", "text/xml");
    

    Esta llamada desemboca en la siguiente salida (asumiendo que se ha usado el manejador de contenidos mostrado antes):

    startDocument
    startElement: namespace='g', localName='a', qName='f:a', attributes={d='1'}
    startElement: namespace='', localName='BBQ', qName='BBQ', attributes={}
    endElement: namespace='', localName='BBQ', qName='BBQ'
    endElement: namespace='g', localName='a', qName='f:a'
    endDocument
    

    Etiquetas y colaboradores del documento

    Contributors to this page: Superruzafa, Nukeador
    Última actualización por: Superruzafa,