Looking for java Keywords? Try Ask4Keywords

Java LanguageAnalyse XML à l'aide des API JAXP


Remarques

XML Parsing est l'interprétation des documents XML afin de manipuler leur contenu à l'aide de constructions sensibles, qu'il s'agisse de "nœuds", "attributs", "documents", "espaces de noms" ou d'événements liés à ces constructions.

Java possède une API native pour la gestion des documents XML, appelée JAXP ou API Java pour le traitement XML . JAXP et une implémentation de référence ont été regroupés avec chaque version de Java depuis Java 1.4 (JAXP v1.1) et ont évolué depuis. Java 8 fourni avec JAXP version 1.6.

L'API propose différentes manières d'interagir avec les documents XML, à savoir:

  • L'interface DOM (Document Object Model)
  • L'interface SAX (API simple pour XML)
  • L'interface StAX (API de streaming pour XML)

Principes de l'interface DOM

L'interface DOM a pour but de fournir une manière conforme à l'interprétation du XML du W3C DOM . Diverses versions de JAXP ont pris en charge divers niveaux de spécification DOM (jusqu'au niveau 3).

Dans l'interface du modèle d'objet de document, un document XML est représenté sous la forme d'une arborescence, en commençant par "l'élément de document". Le type de base de l'API est le type Node , il permet de naviguer d'un Node vers son parent, ses enfants ou ses frères (bien que tous les Node ne puissent pas avoir d'enfants, par exemple, les nœuds de Text sont définitifs dans l'arborescence). et ne jamais avoir childre). Les balises XML sont représentées sous forme d' Element s, qui étendent notamment le Node avec des méthodes liées aux attributs.

L’interface DOM est très utile car elle permet d’analyser des documents XML en tant qu’arbres, et de modifier facilement l’arbre construit (ajout de nœud, suppression, copie, etc.) et enfin sa sérialisation (retour au disque). ) publier des modifications. Cela a cependant un prix: l'arbre réside dans la mémoire, par conséquent, les arbres DOM ne sont pas toujours pratiques pour les documents XML volumineux. De plus, la construction de l'arborescence n'est pas toujours le moyen le plus rapide de gérer le contenu XML, surtout si toutes les parties du document XML ne l'intéressent pas.

Principes de l'interface SAX

L'API SAX est une API orientée événement pour traiter les documents XML. Dans ce modèle, les composants d'un document XML sont interprétés comme des événements (par exemple, "un tag a été ouvert", "un tag a été fermé", "un noeud de texte a été rencontré", "un commentaire a été rencontré"). ..

L'API SAX utilise une approche "d'analyse par poussée", dans laquelle un Parser SAX est chargé d'interpréter le document XML et appelle des méthodes sur un délégué (un ContentHandler ) pour traiter tout événement trouvé dans le document XML. Généralement, on n'écrit jamais un analyseur, mais on fournit un gestionnaire pour rassembler toutes les informations nécessaires à partir du document XML.

L’interface SAX surmonte les limitations de l’interface DOM en ne conservant que le minimum de données nécessaires au niveau de l’analyseur (ex: contextes des espaces de noms, état de validation), seules les informations conservées par le ContentHandler - dont vous êtes responsable tenu en mémoire. Le compromis est qu'il n'y a aucun moyen de "remonter le temps / le document XML" avec une telle approche: alors que DOM permet à un Node de revenir à son parent, il n'y a pas de possibilité dans SAX.

Principes de l'interface StAX

L'API StAX adopte une approche similaire au traitement de XML en tant qu'API SAX (c'est-à-dire pilotée par des événements), la seule différence très significative étant que StAX est un analyseur d'extraction (où SAX était un analyseur poussé). Dans SAX, l' Parser est en contrôle et utilise des rappels sur le ContentHandler . Dans Stax, vous appelez l'analyseur et contrôlez quand / si vous souhaitez obtenir le prochain "événement" XML.

L'API commence par XMLStreamReader (ou XMLEventReader ), qui sont les passerelles par lesquelles le développeur peut demander à nextEvent() , de manière itérative.

Analyse XML à l'aide des API JAXP Exemples Liés