Résumé de plusieurs façons d'analyser XML par Java
Le premier type: Dom.
Le nom complet de DOM est le modèle d'objet de document, qui est le modèle d'objet de document. Dans une application, l'analyseur XML basé sur DOM convertit un document XML en une collection de modèles d'objets (généralement appelés arbre Dom). L'application implémente le fonctionnement des données de document XML via des opérations sur ce modèle d'objet. Grâce à l'interface DOM, une application peut accéder à n'importe quelle partie des données dans un document XML à tout moment. Par conséquent, ce mécanisme utilisant l'interface DOM est également appelé mécanisme d'accès aléatoire.
L'interface DOM fournit un moyen d'accéder aux informations du document XML via un modèle d'objet hiérarchique. Ces modèles d'objets hiérarchiques forment un arbre de nœud basé sur la structure du document XML. Quel que soit le type d'informations décrites dans le document XML, même les données de tabulation, les listes de projets ou un document, le modèle généré à l'aide du DOM est sous la forme d'une arborescence de nœud. C'est-à-dire que le DOM force l'utilisation d'un modèle d'arbre pour accéder aux informations dans un document XML. Étant donné que XML est essentiellement une structure hiérarchique, cette méthode de description est assez efficace.
La méthode d'accès aléatoire fournie par l'arbre Dom apporte une grande flexibilité au développement d'applications, et il peut contrôler arbitrairement le contenu dans l'ensemble du document XML. Cependant, puisque l'analyseur DOM convertit l'intégralité du document XML en arborescence DOM et le met en mémoire, l'exigence de mémoire est relativement élevée lorsque le document est plus grand ou que la structure est relativement complexe. De plus, la traversée des arbres avec des structures complexes est également une opération de longue date. Par conséquent, les analyseurs DOM ont des exigences relativement élevées pour les performances de la machine et leur efficacité de mise en œuvre n'est pas très idéale. Cependant, comme l'idée de la structure des arbres adoptée par l'analyseur DOM est cohérente avec la structure du document XML, et compte tenu de la commodité apportée par un accès aléatoire, l'analyseur DOM a toujours un large éventail de valeur utile.
Importer java.io.file; Importer javax.xml.parsers.DocumentBuilder; Importer javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.element; import org.w3c.dom.nodelist; classe publique DomTest1 {public static void main (String [] args) lève une exception {// étape 1: obtenir l'usine de l'analyseur Dom (la fonction de l'œuvre est de créer un analyseur spécifique) documentBuilderFactory dbf = documentBuilderFactory.NewInstance (); // System.out.println ("Nom de classe:" + dbf.getClass (). GetName ()); // Étape 2: Obtenez le Dom Parser DocumentBuilder db spécifique DB = dbf.newDocumentBuilder (); // System.out.println ("Nom de classe:" + db.getClass (). GetName ()); // Step3: analyser un document XML et obtenir l'objet document (noeud racine) document document = db.parse (nouveau fichier ("candidate.xml")); NodeList list = document.getElementsByTagName ("personne"); for (int i = 0; i <list.getLength (); i ++) {élément élément = (élément) list.item (i); String Content = element.getElementsByTagName ("Name"). Item (0) .getFirstChild (). GetNodevalue (); System.out.println ("Name:" + Content); Content = element.getElementsByTagName ("Address"). Item (0) .getFirstChild (). getNodevalue (); System.out.println ("Adresse:" + Contenu); Content = element.getElementsByTagName ("tel"). Item (0) .getFirstChild (). getNodEvalue (); System.out.println ("Tél:" + Contenu); Content = element.getElementsByTagName ("Fax"). Item (0) .getFirstChild (). getNODEvalue (); System.out.println ("Fax:" + Content); Content = element.getElementsByTagName ("Email"). Item (0) .getFirstChild (). getNodevalue (); System.out.println ("Email:" + Contenu); System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Importer java.io.file; Importer javax.xml.parsers.DocumentBuilder; Importer javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.attr; import org.w3c.dom.comment; import org.w3c.dom.Document; import org.w3c.dom.element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.node; import org.w3c.dom.nodelist; / ** * Utiliser récursivement pour analyser tout document XML donné et sortir son contenu à la ligne de commande * @author zhanglong * * / public class DomTest3 {public static void main (string [] args) lève une exception {documentBuilderFactory dbf = documentBuilderFactory.newinstance (); DocumentBuilder db = dbf.newDocumentBuilder (); Document doc = db.parse (nouveau fichier ("Student.xml")); // Obtenez l'élément de nœud d'élément root root = doc.getDocumentElement (); paramètre (racine); } private static void parseElement (élément élément) {string tagname = element.getNodeName (); Nodelist enfants = element.getChildNodes (); System.out.print ("<" + TagName); // L'objet NamedNodeMap composé de tous les attributs de l'élément doit être jugé sur NamedNodeMap map = element.getAttributes (); // Si l'élément a des attributs if (null! = Map) {for (int i = 0; i <map.getLength (); i ++) {// Obtenez chaque attribut de l'élément attRR = (att) map.item (i); String attName = att.getName (); String attRvalue = att.getValue (); System.out.print ("" + attname + "= /" "+ attvalue +" / ""); }} System.out.print (">"); pour (int i = 0; i <enfants.getLength (); i ++) {node node = enfants.item (i); // Obtenez le type de nœud court nodetype = node.getNodeType (); if (nodeType == node.element_node) {// c'est un élément, continuez à parteelement récursivement ((élément) nœud); } else if (nodeType == node.text_node) {// sortie récursive System.out.print (node.getNodEvalue ()); } else if (nodeType == node.comment_node) {System.out.print ("<! -"); Commentaire commentaire = (commentaire) nœud; // commentaire contenu String data = comment.getData (); System.out.print (données); System.out.print ("->"); }} System.out.print ("</" + tagname + ">"); }}SAX: Le nom complet de SAX est des API simples pour XML, qui est l'interface de programme d'application Simple XML. Contrairement à DOM, le mode d'accès fourni par SAX est un mode séquentiel, qui est un moyen de lire et d'écrire rapidement les données XML. Lorsqu'un document XML est analysé à l'aide de l'analyseur SAX, une série d'événements sera déclenchée et les fonctions de traitement des événements correspondantes seront activées. L'application peut accéder au document XML via ces fonctions de traitement des événements. Par conséquent, l'interface SAX est également appelée interface pilotée par des événements.
Importer java.io.file; Importer javax.xml.parsers.saxParser; import javax.xml.parsers.saxParserFactory; import org.xml.sax.attributes; import org.xml.sax.saxException; import org.xml.sax.helpers.defaulthandler; classe publique SAXTest1 {public static void main (String [] args) lève une exception {// Step1: Obtenez l'instance de sax Parser Factory SAXPARSERFACTORY FACTORY = SAXPARSERFACTORY.NEWInstance (); // Step2: Obtenez l'instance saxer saxparser parser = factory.newSaxParser (); // Step3: Démarrer Parser.Parse (nouveau fichier ("Student.xml"), new MyHandler ()); }} class MyHandler étend Defaulthandler {@Override public void startDocument () lève saxException {System.out.println ("Parse Begin"); } @Override public void endDocument () lève saxException {System.out.println ("parse fini"); } @Override public void startElement (String Uri, String localName, String Qname, Attributes Attributes) lève saxException {System.out.println ("start Element"); } @Override public void Endement (String Uri, String localName, String Qname) lève saxException {System.out.println ("finition élément"); }} Importer java.io.file; import java.util.stack; Importer javax.xml.parsers.saxParser; import javax.xml.parsers.saxParserFactory; import org.xml.sax.attributes; import org.xml.sax.saxException; import org.xml.sax.helpers.defaulthandler; classe publique saxtest2 {public static void main (String [] args) lève une exception {saxparserfactory factory = saxparserfactory.newinstance (); SaxParser parser = factory.newSaxParser (); parser.parse (nouveau fichier ("Student.xml"), new MyHandler2 ()); }} classe MyHandler2 étend DefaulThandler {Private Stack <string> Stack = new Stack <string> (); nom de chaîne privé; Gender de chaîne privée; âge des cordes privées; @Override public void startElement (String Uri, String localName, String Qname, Attributes Attributes) lève saxException {stack.push (qname); pour (int i = 0; i <attributs.getLength (); i ++) {String attName = attributes.getQName (i); String attValue = attributes.getValue (i); System.out.println (attname + "=" + attRvalue); }} @Override public void Caractères (char [] ch, int start, int longueur) lève saxException {string tag = stack.Peek (); if ("name" .equals (tag)) {name = new String (ch, start, longueur); } else if ("Gender" .Equals (tag)) {Gender = new String (ch, start, longueur); } else if ("age" .equals (tag)) {age = new String (ch, start, longueur); }} @Override public void Endement (String Uri, String localName, String Qname) lève saxException {stack.pop (); // indique que l'élément a été analysé et doit sortir de la pile if ("Student" .Equals (qName)) {System.out.println ("name:" + name); System.out.println ("Gender:" + Gender); System.out.println ("Age:" + Age); System.out.println (); }}}JDom:
JDom est un projet open source basé sur une structure d'arbre et utilise une technologie Java pure pour implémenter l'analyse, la génération, la sérialisation et diverses opérations sur des documents XML. (http://jdom.org)
• JDom sert directement la programmation Java. Il utilise de nombreuses fonctionnalités du langage Java plus puissant (surcharge de méthode, concepts de collecte, etc.) pour combiner efficacement les fonctions de sax et de Dom.
• JDom est une nouvelle fonction API pour lire, écrire et exploiter XML en langue java. Ces fonctions d'API sont optimisées dans la mesure maximale sous la prémisse de la franchise, de la simplicité et de l'efficacité.
JDom Créer XML
import java.io.filewriter; import org.jdom.attribute; import org.jdom.comment; import org.jdom.Document; import org.jdom.element; import org.jdom.output.format; import org.jdom.output.xmloutputter; classe publique JDomTest1 {public static void main (String [] args) lève une exception {document document = nouveau document (); Élément root = nouvel élément ("root"); Document.AddContent (root); Commentaire commentaire = nouveau commentaire ("Ceci est mes commentaires"); root.addContent (commentaire); Élément e = nouvel élément ("bonjour"); E.SetAttribute ("Sohu", "www.sohu.com"); root.addContent (e); Élément e2 = nouvel élément ("monde"); Attribut attr = nouvel attribut ("test", "hehe"); e2.SetAttribute (att); E.AddContent (E2); e2.AddContent (nouvel élément ("aaa"). setAttribute ("a", "b") .setAttribute ("x", "y"). setAttribute ("gg", "hh"). setText ("text contenu")); Format format = format.getprettyformat (); format.setindent (""); // format.SetEncoding ("gbk"); Xmloutputter out = new xmloutputter (format); out.output (document, nouveau filewriter ("jdom.xml")); }}JDom Analyse XML
Importer java.io.file; Importer java.io.fileOutputStream; Importer java.util.list; import org.jdom.attribute; import org.jdom.Document; import org.jdom.element; import org.jdom.input.saxBuilder; import org.jdom.output.format; import org.jdom.output.xmloutputter; classe publique JDomTest2 {public static void main (String [] args) lève une exception {saxbuilder builder = new saxbuilder (); Document doc = builder.build (nouveau fichier ("jdom.xml")); Element element = doc.getrootelement (); System.out.println (élément.getName ()); Element hello = element.getchild ("bonjour"); System.out.println (Hello.GetText ()); List list = hello.getAttributes (); for (int i = 0; i <list.size (); i ++) {attribut att = (attribut) list.get (i); String attName = att.getName (); String attRvalue = att.getValue (); System.out.println (attname + "=" + attRvalue); } hello.removechild ("world"); Xmloutputter out = new xmloutputter (format.getPetTyformat (). SetIndent ("")); out.output (doc, new FileOutputStream ("jdom2.xml")); }}DOM4J
Importer java.io.fileOutputStream; import java.io.filewriter; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.element; import org.dom4j.io.outputformat; import org.dom4j.io.xmlwriter; classe publique Test1 {public static void main (String [] args) lève une exception {// créer un document et définir le nœud d'élément racine du document: la première méthode // document document = documentHelper.CreateDocument (); // // élément root = documentHelper.CreateElement ("Student"); // // document.SetRootelement (root); // Créer un document et définir le nœud d'élément racine du document: le deuxième élément de méthode root = documentHelper.CreateElement ("Student"); Document document = documentHelper.CreateDocument (root); root.addattribute ("name", "zhangsan"); Element helloElement = root.addelement ("bonjour"); Element worldElement = root.addelement ("world"); helloElement.seTText ("Hello"); WorldElement.setText ("Monde"); helloElement.AddAttribute ("Age", "20"); Xmlwriter xmlwriter = new xmlwriter (); xmlwriter.write (document); OutputFormat format = new OutputFormat ("", true); Xmlwriter xmlwriter2 = new xmlwriter (new FileOutputStream ("Student2.xml"), format); xmlwriter2.write (document); Xmlwriter xmlwriter3 = new xmlwriter (new FileWriter ("Student3.xml"), format); xmlwriter3.write (document); xmlwriter3.close (); }} Importer java.io.file; Importer java.util.iterator; Importer java.util.list; Importer javax.xml.parsers.DocumentBuilder; Importer javax.xml.parsers.DocumentBuilderFactory; import org.dom4j.Document; import org.dom4j.element; import org.dom4j.io.domreader; import org.dom4j.io.saxreader; classe publique test2 {public static void main (String [] args) lève l'exception {saxReader saxReader = new saxReader (); Document doc = saxreader.read (nouveau fichier ("Student2.xml")); Élément root = doc.getrootelement (); System.out.println ("élément root:" + root.getName ()); List childlist = root.Elements (); System.out.println (ChildList.Size ()); List childlist2 = root.elements ("bonjour"); System.out.println (ChildList2.Size ()); Élément d'abord = root.element ("bonjour"); System.out.println (First.AttributeValue ("Age")); for (iterator iter = root.elementIterator (); iter.hasnext ();) {élément e = (élément) iter.next (); System.out.println (E.AttributeValue ("Age")); } System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ DocumentBuilderFactory.NewInstance (); DomReader.Read (document); élément rootage = d.getRooteLement (); import java.io.filewriter; import org.jdom.attribute; import org.jdom.Document; import org.jdom.element; import org.jdom.output.format; import org.jdom.output.xmloutputter; classe publique test3 {public static void main (String [] args) lève l'exception {document document = new document (); Element root = nouvel élément ("Contacts List"). SetAttribute (nouvel attribut ("Company", "Groupe A")); Document.AddContent (root); Élément ContactPerson = nouvel élément ("Contact"); root.addContent (contacterSerson); ContactPerson .AddContent (nouvel élément ("Name"). SetText ("Zhang San")) .AddContent (nouvel élément ("Company"). SetText ("Company"))) .AddContent (nouvel élément ("Tel"). SetText ("021-55556666"))) .addcontent (New Element ("Address"). Élément ("Street"). SetText ("5th Street")) .AddContent (nouvel élément ("City"). SetText ("Shanghai"))) .AddContent (nouvel élément ("Province"). SetText ("Shanghai"))); Xmloutputter output = new XmloutPutter (format.getPetTyformat () .SetIndent ("). SetEncoding (" gbk ")); output.output (document, nouveau filewriter (" contact.xml "));}}