Junto a ignorableWhitespace, s�lo hay otros dos m�todos en el interface DocumentHandler: setDocumentLocator y processingInstruction. En esta secci�n del tutorial implementaremos estos dos manejadores de eventos.
�Identificar la Localizaci�n del Documento
Un locator es un objeto que contiene la informaci�n necesaria para encontrar un documento. La clase Locator encapsula un ID de sistema (URL) o un identificador p�blico (URN), o ambos. Necesitaremos esta informaci�n si queremos encontrar algo relativo al documento actual -- de la misma forma, por ejemplo, que un navegador HTML procesa un atributo href="anotherFile" en una etiqueta de enlace -- el navegador usa la localizaci�n del documento actual para encontrar anotherFile.
Tambi�n podr�amos usar el locator para imprimir un buen mensaje de diagn�stico. Adem�s de la localizaci�n del documento y el identificador p�blico, el locator contiene m�todos que dan los n�meros de columna y de l�nea de los eventos m�s recientemente procesados. Al m�todo setDocumentLocator se le llama s�lo uan vez al principio del an�lisis. Para obtener el n�mero de l�nea o de columna actual, grabaremos el locator cuando se invoque a setDocumentLocator y luego puede ser usado en otros m�todos manejadores de eventos.
Nota:
El c�digo descrito en est� secci�n est� en Echo04.java. Su salida est� almacenada en Echo04-01.log. |
A�adimos el siguiente m�todo al programa Echo para obtener el locator del documento y lo usamos para mostrar el ID del sistema del documento.
... private String indentString = " "; // Amount to indent private int indentLevel = 0; public void setDocumentLocator (Locator l) { try { out.write ("LOCATOR"); out.write ("\n SYS ID: " + l.getSystemId() ); out.flush (); } catch (IOException e) { // Ignore errors } } public void startDocument () ...
Notas:
|
Cuando compilemos y ejecutemos el programa sobre slideSample01.xml, podremos ver una salida parecida a esta.
LOCATOR SYS ID: file:<path>/samples/slideSample01.xml START DOCUMENT <?xml version='1.0' encoding='UTF-8'?> ...
Aqu�, es aparente que setDocumentLocator es llamado antes que startDocument. Lo que puede crear alguna diferencia si hacemos alguna inicializaci�n en el c�digo de manejo de eventos.
�Manejar Instrucciones de Procesamiento
Algunas veces tiene sentido codificar instrucciones de proceso especificas de la aplicaci�n en los datos XML. En este ejercicio, a�adiremos una instrucci�n de procesamiento a nuestro fichero slideSample.xml y luego modificaremos el programa Echo para mostrarlo.
Nota:
El c�digo descrito en esta secci�n est� en Echo05.java. Este fichero opera sobre slideSample02.xml. La salida est� almacenada en Echo05-02.log. |
Como hemos visto en Un R�pida Introducci�n a XML, el formato de una instrucci�n de proceso es <?target data?>, donde "target" es la aplicaci�n objetivo que se espera que haga el procesamiento, y "data" es la instrucci�n o informaci�n para el proceso. A�adimos el texto en negrita de abajo para a�adir una instrucci�n de procesamiento para un programa de presentaci�n de diapositivas que le pregunte al usuario para saber qu� diapositivas mostrar (t�cnicas, nivel-ejecutivo, o todas).
<slideshow ... > <!-- PROCESSING INSTRUCTION --> <?my.presentation.Program: QUERY="exec, tech, all"?> <!-- TITLE SLIDE -->
Notas:
|
Ahora que ya tenemos una instrucci�n de procesamiento con la que trabajar, a�adimos el c�digo en negrita de abajo a la aplicaci�n Echo.
public void characters (char buf [], int offset, int len) ... } public void processingInstruction (String target, String data) throws SAXException { nl(); emit ("PROCESS: "); emit ("<?"+target+" "+data+"?>"); } private void emit (String s) ...
Cuando completemos las ediciones, compilamos y ejecutamos el programa. La parte importante de la salida se deber�a parecer a esto.
... CHARS: CHARS: PROCESS: <?my.presentation.Program: QUERY="exec, tech, all"?> CHARS: CHARS: ...
Ahora que hemos tenido la oportunidad de trabajar con instrucciones de procesamiento, podemos eliminar esa instrucci�n del fichero XML. No la necesitaremos m�s.