1. Dom (Jaxp Crimson Parser)
DOM est la norme W3C officielle pour représenter les documents XML d'une manière indépendante de la plate-forme et du langage. Dom est une collection de nœuds ou de fragments d'information organisés dans une hiérarchie. Cette hiérarchie permet aux développeurs de rechercher des informations spécifiques dans l'arbre. L'analyse de cette structure nécessite généralement le chargement de l'ensemble du document et la construction de la hiérarchie avant que tout travail puisse être effectué. Comme il est basé sur le niveau d'information, le DOM est considéré comme basé sur des arbres ou basé sur des objets. DOM et le traitement à base d'arbres généralisés présentent plusieurs avantages. Premièrement, comme l'arbre est persistant en mémoire, il peut être modifié afin que l'application puisse apporter des modifications aux données et à la structure. Il vous permet également de naviguer dans l'arbre à tout moment, plutôt que d'être un travail unique comme le sax. DOM est beaucoup plus simple à utiliser.
2. Sax
Les avantages du traitement SAX sont très similaires aux avantages du streaming. L'analyse peut commencer immédiatement, plutôt que d'attendre que toutes les données soient traitées. Et, comme l'application ne vérifie les données que lors de la lecture, elle n'a pas besoin de stocker les données en mémoire. C'est un énorme avantage pour les grands documents. En fait, l'application n'a même pas à analyser l'ensemble du document; Il peut arrêter l'analyse lorsqu'une certaine condition est remplie. D'une manière générale, le sax est beaucoup plus rapide que son dom de remplacement.
Choisissez DOM ou SAX? Pour les développeurs qui ont besoin d'écrire leur propre code pour traiter les documents XML, le choix d'un modèle DOM ou SAX ARNAGE est une décision de conception très importante. Dom utilise la méthode d'établissement d'une structure d'arbre pour accéder aux documents XML, tandis que Sax utilise le modèle d'événement.
L'analyseur DOM convertit un document XML en arbre contenant son contenu et peut traverser l'arbre. L'avantage de l'analyse d'un modèle avec DOM est qu'il est facile à programmer. Les développeurs doivent uniquement appeler des instructions de fabrication d'arborescence, puis utiliser des API de navigation pour accéder aux nœuds d'arborescence requis pour terminer la tâche. Il est facile d'ajouter et de modifier des éléments dans l'arbre. Cependant, comme l'ensemble du document XML doit être traité lors de l'utilisation de l'analyseur DOM, les exigences de performances et de mémoire sont relativement élevées, en particulier lors de la rencontre de grands fichiers XML. En raison de ses capacités de traversée, les analyseurs DOM sont souvent utilisés dans les services où les documents XML nécessitent des changements fréquents.
L'analyseur de saxer adopte un modèle basé sur des événements. Il peut déclencher une série d'événements lors de l'analyse d'un document XML. Lorsqu'une balise donnée est trouvée, il peut activer une méthode de rappel pour indiquer la méthode que la balise a été trouvée. Le SAX nécessite généralement une faible mémoire car il permet aux développeurs de décider des balises qu'ils souhaitent traiter. Surtout lorsque les développeurs n'ont besoin que de traiter une partie des données contenues dans le document, la capacité d'expansion du Sax est mieux reflétée. Cependant, le codage est difficile lors de l'utilisation de sax-analyser, et il est difficile d'accéder à plusieurs données différentes dans le même document en même temps.
3. JDom http://www.jdom.org
Le but de JDom est d'être un modèle de document spécifique à Java, qui simplifie l'interaction avec XML et est plus rapide que l'utilisation de DOM. Comme il s'agit du premier modèle spécifique à Java, JDom a été vigoureusement promu et promu. Envisageant de finir par l'utiliser comme une "extension standard Java" via "la demande de spécification Java JSR-102". Le développement de JDom a commencé depuis le début de 2000.
Jdom et Dom sont principalement différents sous deux aspects. Premièrement, JDom n'utilise que des classes de béton et non des interfaces. Cela simplifie l'API à certains égards, mais limite également la flexibilité. Deuxièmement, l'API utilise un grand nombre de classes de collections, simplifiant l'utilisation de développeurs Java qui connaissent déjà ces classes.
La documentation JDom stipule que son objectif est de "utiliser 20% (ou moins) d'efforts pour résoudre 80% (ou plus) de problèmes Java / XML" (supposé à 20% basé sur la courbe d'apprentissage). JDom est bien sûr utile pour la plupart des applications Java / XML, et la plupart des développeurs trouvent des API beaucoup plus faciles à comprendre que DOM. JDom comprend également des vérifications assez étendues du comportement du programme pour empêcher les utilisateurs de faire quoi que ce soit sans signification dans XML. Cependant, cela vous oblige toujours à bien comprendre XML afin de faire quelque chose au-delà des bases (ou même de comprendre les erreurs dans certains cas). Cela peut être un travail plus significatif que d'apprendre une interface DOM ou JDom.
Jdom lui-même ne contient pas d'analyseur. Il utilise généralement un analyseur SAX2 pour analyser et valider les documents XML d'entrée (bien qu'il puisse également prendre des représentations DOM précédemment construites en entrée). Il contient certains convertisseurs pour sortir des représentations JDom en flux d'événements SAX2, modèles DOM ou documents texte XML. JDom est open source publié sous la variante de licence Apache.
4. Dom4j http://dom4j.sourceforge.net
Bien que Dom4j représente un résultat de développement complètement indépendant, il s'agissait initialement d'une branche intelligente de JDom. Il intègre de nombreuses fonctionnalités au-delà des représentations de documents XML de base, notamment la prise en charge intégrée XPATH, la prise en charge du schéma XML et le traitement basé sur des événements pour les documents grands ou en difficulté. Il offre également la possibilité de créer une représentation de document, qui a un accès parallèle via l'API DOM4J et l'interface DOM standard. Il est en cours de développement depuis la seconde moitié de 2000.
Pour prendre en charge toutes ces fonctionnalités, Dom4j utilise des interfaces et des méthodes de classe de base abstraites. Dom4j utilise largement la classe de collections dans l'API, mais dans de nombreux cas, il fournit également des alternatives pour permettre de meilleures performances ou une méthode d'encodage plus simple. L'avantage direct est que si Dom4j paie le prix d'une API plus complexe, elle offre une flexibilité beaucoup plus grande que JDom.
Lors de l'ajout de flexibilité, de l'intégration XPATH et des objectifs du traitement des documents importants, Dom4j est le même que JDom: facilité d'utilisation et fonctionnement intuitif pour les développeurs Java. Il s'est également engagé à devenir une solution plus complète que JDom, atteignant l'objectif de faire face à tous les problèmes Java / XML dans la nature. Lorsque vous complétez cet objectif, il met l'accent sur la prévention de la prévention du comportement d'application incorrect que JDom.
Dom4j est une très, très excellente API Java XML, avec d'excellentes performances, des fonctions puissantes et extrêmement facile à utiliser. Il s'agit également d'un logiciel open source. De nos jours, vous pouvez voir que de plus en plus de logiciels Java utilise DOM4J pour lire et écrire XML. Il convient particulièrement de mentionner que même Jaxm de Sun utilise DOM4J.
Comparaison des quatre méthodes
Dom4j a les meilleures performances, et même Jaxm de Sun utilise DOM4J. Actuellement, de nombreux projets open source utilisent DOM4J en grande quantité, tels que le célèbre Hibernate utilise également DOM4J pour lire les fichiers de configuration XML. Si la portabilité n'est pas prise en compte, DOM4J est utilisé.
JDom et Dom fonctionnent mal lors des tests de performances, le débordement de la mémoire lors du test des documents de 10 m. Il vaut également la peine de considérer Dom et Jdom dans le cas d'une petite documentation. Bien que les développeurs de JDom aient déclaré qu'ils s'attendaient à se concentrer sur les problèmes de performance avant la sortie officielle, du point de vue de la performance, cela ne recommande pas vraiment. De plus, Dom est toujours un très bon choix. L'implémentation DOM est largement utilisée dans une variété de langages de programmation. C'est également la base de nombreuses autres normes liées à la XML, car il s'agit officiellement de recommandations W3C (par opposition aux modèles Java non standard), il peut donc être nécessaire également dans certains types de projets (comme l'utilisation de DOM dans JavaScript).
Le SAX fonctionne mieux, ce qui dépend de sa méthode d'analyse spécifique - motivée par des événements. Un Sax détecte un flux XML à venir, mais n'est pas chargé dans la mémoire (bien sûr, lorsque le flux XML est lu, certains documents seront temporairement cachés en mémoire).
Utilisation de base de quatre méthodes de fonctionnement XML
Fichier XML:
<? Xml version = "1.0" coding = "gb2312"?> < Résultat> < Valeur> < Non> a1234 < / no> < addr> n ° xx section xx road, xx town, xx comté, province du Sichuan </ addr> < / valeur> < Valeur> < non> < addr> groupe </dddr> < / valeur> < / résultat >
1) Méthode d'implémentation DOM
import java.io. *; import java.util. *; import org.w3c.dom. *; import javax.xml.parsers. *; public class myxmlreader {public static void main (String arge []) {long lasting = system.currenttimemillis (); try {file f = new File ("data_10k.xml"); DocumentBuilderFactory Factory = DocumentBuilderFactory.NewInstance (); DocumentBuilder Builder = Factory.NewDocumentBuilder (); Document doc = builder.parse (f); NodeList nl = doc.getElementsByTagName ("valeur"); pour (int i = 0; i < nl.getLength (); i ++) {System.out.print ("Numéro de plaque d'immatriculation:" + doc.getElementsByTagName ("non"). Item (i) .getFirstChild (). getNodevalue ()); System.out.println ("Adresse du propriétaire:" + doc.getElementsByTagName ("addr"). Item (i) .getFirstChild (). GetNodevalue ()); }} catch (exception e) {e.printStackTrace ();} 2) Méthode de mise en œuvre du sax
import org.xml.sax. *; import org.xml.sax.helpers. *; import javax.xml.parsers. *; public class myxmlreader étend defaulthandler {java.util.stack tags = new Java.util.stack (); public myxmlreader () {super ();} public static void main (String args []) {long lasting = System.currenttimemillis (); essayez {saxparserfactory sf = saxParserFactory.newInstance (); SAXPARSER SP = SF.NEWSAXPARSER (); MyXmlReader Reader = new MyXmlReader (); sp.parse (new InputSource ("data_10k.xml"), lecteur); } catch (exception e) {e.printStackTrace (); } System.out.println ("Run Time:" + (System.Currenttimemillis () - Lasting) + "millisecondes");} public void Caractères (char ch [], int start, int length) lève saxException {String tag = (string) tags.Peek (); if (tag.equals ("no")) {System.out.print ("Numéro de plaque d'immatriculation:" + nouvelle chaîne (ch, start, longueur));} if (tag.equals ("addr")) {System.out.println ("Adresse:" + New String (ch, start, longueur)));}} public Void startElement (String uri, string localname, nom, String qname, attaque) ations tags.push (qName);}} 3) Méthode de mise en œuvre de JDom
import java.io. *; import java.util. *; import org.jdom. *; import org.jdom.input. *; public class myxmlreader {public static void main (String arge []) {long lasting = System.currenttimemillis (); essayez {saxbuilder builder = new saxbuilder (); Document doc = builder.build (nouveau fichier ("data_10k.xml")); Élément foo = doc.getrootelement (); Liste AllChildren = foo.getChildren (); pour (int i = 0; i < allChildren.size (); i ++) {System.out.print ("Numéro de plaque d'immatriculation:" + ((élément) allChildren.get (i)). getchild ("no"). getText ()); System.out.println ("Adresse du propriétaire:" + ((élément) allchildren.get (i)). Getchild ("addr"). GetText ()); }} catch (exception e) {e.printStackTrace ();}} 4) Méthode d'implémentation DOM4J
import java.io. *; import java.util. *; import org.dom4j. *; import org.dom4j.io. *; public class myxmlreader {public static void main (string arge []) {long lasting = system.currentTimemillis (); try {file f = new File ("data_10k.xml"); SAXREDER Reader = new saxReader (); Document doc = reader.read (f); Élément root = doc.getrootelement (); Élément foo; for (iterator i = root.elementIterator ("value"); i.hasnext () {foo = (élément) i.next (); System.out.print ("Numéro de plaque d'immatriculation:" + foo.elementText ("no")); e.printStackTrace ();})