Un locator est un objet qui contiens l'information nécessaire pour trouver un document. La classe Locator encapsule un system ID (URL) ou un identificateur public (URN), ou les deux. Vous pourriez avoir besoin de cette information si vous voulez trouvez des ressources relatives au document courant -- de la meme manière, qu'un navigateur gère les href="anotherFile" dans un document HTML -- le navigateur utilise la localisation du document courant pour trouver le document anotherFile.Identifier la provenance d'un document (Document's Location)
Vous pouvez aussi utiliser le locator pour afficher des messages d'informations. En plus de la localisation du document et de son identificateur public, le locator contient des méthodes qui retournent la colonne et la ligne du plus récent dees événements produit. La méthode setDocumentLocator est appelée une seule fois au début du parsage. Pour obtenir la ligne courante ou le numéro de colonne, il vous faut garder une référence vers le locator lorsque vous le passez à la méthode setDocumentLocator, ainsi vous pourrez y accéder dans les méthodes de traitement d'événements.
Note: Vous pouvez comme d'habitude trouver le code ici Echo04.java , et l'affichage qu'il produit là Echo04-01.log.Rajouter la méthode ci-dessous à notre programme Echo, pour obtenir le locator et l'utiliser pour afficher le system ID du document.
... private String indentString = " "; // Amount to indent private int indentLevel = 0; |
Notes: Cette méthode contrairtement à toutes les autres méthodes de DocumentHandler, ne retourne pas de SAXException. Donc, au lieu d'utiliser emit pour l'affichage, notre code écrit directement sur la sortie standard System.out. (Cette méthode n'est d'ailleurs généralement pas utilisée pour ce genre de choses, elle sert d'habitude à sauvegarder une référence sur l'objet Locator pour pouvoir l'utiliser plus tard).
Ici, il est clair que la méthode setDocumentLocator est invoquée avant startDocument. Ceci peut etre important si vous faites des intialisations dans les méthodes de traitement des événements.LOCATOR SYS ID: file:<path>/../samples/slideSample01.xml START DOCUMENT <?xml version='1.0' encoding='UTF-8'?> ...
Il peut etre intéressant parfois d'inclure du code spécifique à une application dans les données XML. Dans cet exercice, nous allons ajouter une instruction de traitement à notre fichier slideSample.xml fet nous modifierons ensuite notre programme Echo pour pouvoir l'afficher.Gestion des instructions de traitement (processing instruction)
Note: Le code de cet exemple se trouve dans Echo05.java. Le fichier sur lequel il opére est slideSample02.xml. L'affichage est rangé dans le fichier Echo05-02.log.Le format d'une instruction de traitement est <?target data?>, ou "target" est l'application cible qui est sensée traitée l'instruction, et "data" est l'instruction ou information qu'elle doit traitée. Ajouter les lignes suivantes, qui s'adressent potentiellement à une application de présentation de slides qui demanderait à l'utilisateur qu'elle est le type d'audience :
Notes:<slideshow ... ><!-- PROCESSING INSTRUCTION --> <?my.presentation.Program: QUERY="exec, tech, all"?> <!-- TITLE SLIDE -->
Les données débutent juste après le premier espace.
Qualifier de manière complète l'application cible à
un sens : éviter d'éventuel conflits avec d'autres applications
qui pourraient traiter le meme genre de données.
public void characters (char buf [], int offset, int len) ... } |
Lorsque vous l'aurez fait, compilez et exécutez l'application : voici un extrait de la partie nous intéressant plus particulièrement :
Maintenant, que vous avez la possibilité de travailler avec les intructions de traitement, vous pouvez l'enlever du fichier XML, on ne s'en servira plus (à moins que vou ne désiriez écrire l'application chargée du traitement de ces instructions ;-).... CHARS: CHARS: PROCESS: <?my.presentation.Program: QUERY="exec, tech, all"?> CHARS: CHARS: ...