XML est maintenant devenu un format d'échange de données commun. Son indépendant de la plate-forme, indépendant du langage et indépendant du système apporte une grande commodité à l'intégration et à l'interaction des données. Pour les connaissances de syntaxe et les détails techniques de XML lui-même, vous devez lire les documents techniques pertinents. Les contenus inclus ici incluent DOM (modèle d'objet de document), DTD (Définition du type de document), SAX (API simple pour XML), XSD (définition de schéma XML), XSLT (transformations de langage de feuille de style extensible). Pour plus de détails, veuillez consulter le document de site Web officiel du W3C http://www.w3.org pour plus d'informations.
Les méthodes d'analyse XML sont les mêmes dans différentes langues, mais la syntaxe d'implémentation est différente. Il existe deux méthodes d'analyse de base, l'une est appelée Sax et l'autre est appelée DOM. Le sax est basé sur l'analyse du flux d'événements et DOM est basé sur l'analyse de la structure des arbres de documents XML. Supposons que le contenu et la structure de notre XML soient les suivants:
<? xml version = "1.0" Encoding = "UTF-8"?> <Deyleents> <Lesyee> <name> ddviplinux </name> <sex> m </x> <ge> 30 </ge> </dolyee> </dolyee>
Cet article utilise la langue Java pour implémenter la génération et l'analyse des documents XML de DOM et SAX.
Tout d'abord, définissez une interface pour le fonctionnement des documents XML XMLDocument qui définit l'interface pour établir et analyser les documents XML.
/ ** * * @author hongliang.dinghl * Définissez l'interface entre l'establishment de document XML et l'analyse * / interface publique XMLDocument {/ ** * Créer un document XML * @param fichier de nom de fichier Nom du chemin complet * / public void CreateExml (String filename); / ** * Parse XML Document * @Param File Name File Nom du chemin complet * / public void ParserXML (String FileName); } 1. Dom génère et analyse les documents XML
Définit un ensemble d'interfaces pour la version analysée du document XML. L'analyseur lit l'ensemble du document, puis construit une structure d'arborescence résidente de la mémoire, et le code peut ensuite utiliser l'interface DOM pour faire fonctionner cette structure d'arbre. Avantages: L'ensemble de l'arborescence des documents est en mémoire, ce qui est facile à utiliser; prend en charge diverses fonctions telles que la suppression, la modification et le réarrangement; Inconvénients: l'ensemble du document est transféré dans la mémoire (y compris les nœuds inutiles), gaspillant du temps et de l'espace; Utilisé: une fois le document analysé, il est nécessaire d'accéder à ces données plusieurs fois; Des ressources matérielles suffisantes (mémoire, CPU).
import java.io.fileInputStream; import java.io.filenotfoundException; Importer java.io.fileOutputStream; Importer java.io.ioException; import java.io.inputStream; import java.io.printwriter; Importer javax.xml.parsers.DocumentBuilder; Importer javax.xml.parsers.DocumentBuilderFactory; Importer javax.xml.parsers.PaSerConfigurationException; import javax.xml.transform.outputkeys; import javax.xml.transform.transformateur; import javax.xml.transform.transformerConfigurationException; Importer javax.xml.transform.transformRexception; Importer javax.xml.transform.transFactory; import javax.xml.transform.dom.domsource; import javax.xml.transform.stream.streamResult; import org.w3c.dom.Document; import org.w3c.dom.element; import org.w3c.dom.node; import org.w3c.dom.nodelist; import org.xml.sax.saxException; / ** * * @author hongliang.dinghl * Dom Génération et analyse des documents XML * / classe publique DomDemo implémente XMLDocument {document de document privé; Nom de fichier de chaîne privée; public void init () {try {documentBuilderFactory factory = documentBuilderFactory .newInstance (); DocumentBuilder Builder = Factory.NewDocumentBuilder (); this.Document = builder.newDocument (); } catch (ParserConfigurationException e) {System.out.println (e.getMessage ()); }} public void CreateExml (String FileName) {élément root = this.Document.CreateElement ("Employés"); this.Document.ApendChild (root); Element Employee = this.Document.CreateElement ("Employé"); Nom de l'élément = this.Document.CreateElement ("Name"); name.appendChild (this.document.createTextNode ("ding hongliang")); employee.ApendChild (nom); Element Sex = this.Document.CreateElement ("Sex"); Sex.ApendChild (this.Document.CreateTextNode ("M")); Employee.ApendChild (sexe); Élément Age = this.Document.CreateElement ("Age"); Age.ApendChild (this.Document.CreateTextNode ("30")); Employee.ApendChild (âge); root.ApendChild (employé); TransformorFactory tf = transformèrefactory.newinstance (); try {transformateur transformateur = tf.newTransformrer (); Domsource source = new Domsource (document); Transformor.SetOutputProperty (OutputKeys.encoding, "GB2312"); Transformor.SetOutputProperty (OutputKeys.indent, "Oui"); Printwriter pw = new printwriter (new FileOutputStream (nom de fichier)); StreamResult Result = new StreamResult (PW); transformère.transform (source, résultat); System.out.println ("Générer le fichier XML avec succès!"); } catch (transformerConfigurationException e) {System.out.println (e.getMessage ()); } catch (illégalArgumentException e) {System.out.println (e.getMessage ()); } catch (filenotfoundException e) {System.out.println (e.getMessage ()); } catch (transformèrexception e) {System.out.println (e.getMessage ()); }} public void ParserXml (String filename) {try {documentBuilderFactory dbf = documentBuilderFactory.newinstance (); DocumentBuilder db = dbf.newDocumentBuilder (); Document document = db.parse (nom de fichier); Employés nodeList = document.getChildNodes (); pour (int i = 0; i <employés.getLength (); i ++) {nœud employee = employes.item (i); Nodelist EmployeeInfo = employee.getChildNodes (); pour (int j = 0; j <employeeInfo.getLength (); j ++) {node node = EmployeeInfo.item (j); Nodelist EmployEMEME = node.getChildNodes (); pour (int k = 0; k <employeeMeta.getLength (); k ++) {System.out.println (Employememeta.item (k) .getNodeName () + ":" + Employememeta.item (k) .getTextContent ()); }}} System.out.println ("ParserMeta.Item (K) .GetTextContent ());} Catch (filenotFoundException e) {System.out.println (e.getMessage ());} Catch (ParserConfigurationException e) {System.out.println (E.GetMessage ());} Catch (ParserConFigne e) {System.out.println (e.getMessage ());} catch (saxException e) {System.out.println (e.getMessage ();} Catch (ioException e) {System.out.println (e.getMessage ()); 2. Le sax génère et parses XML Documents
Pour résoudre le problème DOM, sax apparaît. Sax, axé sur les événements. Lorsque l'analyseur découvre le début d'un élément, la fin d'un élément, le début ou la fin d'un document, etc., il envoie des événements, et le programmeur écrit du code pour répondre à ces événements et enregistre les données. Avantages: Pas besoin de saisir l'ensemble du document à l'avance, il prend moins de ressources; Le code d'analyse SAX est plus petit que le code Parser Dom, adapté à l'applet et au téléchargement. Inconvénients: non persistants; Après un événement, si les données ne sont pas enregistrées, les données seront perdues; apatritude; Seul le texte peut être obtenu à partir de l'événement, mais il ne sait pas à quel élément l'élément appartient; Occasions d'utilisation: Applet; Seule une petite quantité de contenu du document XML est requise et remonte rarement à l'accès; La mémoire de la machine est faible;
import java.io.fileInputStream; import java.io.filenotfoundException; Importer java.io.ioException; import java.io.inputStream; Importer javax.xml.parsers.PaSerConfigurationException; 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; / ** * * @author hongliang.dinghl * SAX PARSING * / public class saxdemo implémente xmlDocument {public void createExml (String filename) {System.out.println ("<<" + filename + ">>"); } public void ParserXML (String FileName) {SAXPARSERFACTORY SAXFAC = SAXPARSERFACTORY.NEWInstance (); essayez {saxParser saxParser = saxfac.newSaxParser (); InputStream est = new FileInputStream (nom de fichier); saxparser.parse (est, new mysaxhandler ()); } catch (ParserConfigurationException e) {e.printStackTrace (); } catch (saxException e) {e.printStackTrace (); } catch (filenotFoundException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }} class MySaxHandler étend Defaulthandler {boolean hasattribute = false; Attributs attributs = null; public void startDocument () lève saxException {System.out.println ("Le document a commencé l'impression"); } public void endDocument () lève saxException {System.out.println ("Le document a mis fin à l'impression"); } public void startElement (String uri, String localName, String Qname, Attributes Attributes) lève saxException {if (qName.equals ("employés")) {return; } if (qName.equals ("Employee")) {System.out.println (qName); } if (attributs.getLength ()> 0) {this.attributes = attributs; this.hasattribute = true; }} public void Endement (String Uri, String localName, String Qname) lève saxException {if (HasAttribute && (attributs! = null)) {for (int i = 0; i <attributs.getLength (); i ++) {system.out.println (attributs.getQname (0) + attributes.getvalue (0)); }}} Public void Caractères (char [] ch, int start, int longueur) lève saxException {System.out.println (nouvelle chaîne (ch, start, longueur)); }} package com.alisoft.facepay.framework.bean; import java.io.fileInputStream; import java.io.filenotfoundException; Importer java.io.ioException; import java.io.inputStream; Importer javax.xml.parsers.PaSerConfigurationException; 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; / ** * * @author hongliang.dinghl * SAX PARSING * / public class saxdemo implémente xmlDocument {public void createExml (String filename) {System.out.println ("<<" + filename + ">>"); } public void ParserXML (String FileName) {SAXPARSERFACTORY SAXFAC = SAXPARSERFACTORY.NEWInstance (); essayez {saxParser saxParser = saxfac.newSaxParser (); InputStream est = new FileInputStream (nom de fichier); saxparser.parse (est, new mysaxhandler ()); } catch (ParserConfigurationException e) {e.printStackTrace (); } catch (saxException e) {e.printStackTrace (); } catch (filenotFoundException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }}} class MySaxHandler étend Defaulthandler {boolean hasattribute = false; Attributs attributs = null; public void startDocument () lève saxException {System.out.println ("Le document a commencé l'impression"); } public void endDocument () lève saxException {System.out.println ("Le document a mis fin à l'impression"); } public void startElement (String uri, String localName, String Qname, Attributes Attributes) lève saxException {if (qName.equals ("employés")) {return; } if (qName.equals ("Employee")) {System.out.println (qName); } if (attributs.getLength ()> 0) {this.attributes = attributs; this.hasattribute = true; }} public void Endement (String Uri, String localName, String Qname) lève saxException {if (HasAttribute && (attributs! = null)) {for (int i = 0; i <attributs.getLength (); i ++) {system.out.println (attributs.getQname (0) + attributes.getvalue (0)); }}} Public void Caractères (char [] ch, int start, int longueur) lève saxException {System.out.println (nouvelle chaîne (ch, start, longueur)); }}3. Dom4j génère et parses XML Documents
Dom4j est une très, très excellente API Java XML, avec d'excellentes performances, des fonctions puissantes et extrêmement faciles à utiliser, et c'est aussi 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.
Importer java.io.file; import java.io.filewriter; Importer java.io.ioException; Importer java.io.writer; Importer java.util.iterator; import org.dom4j.Document; Import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.element; import org.dom4j.io.saxreader; import org.dom4j.io.xmlwriter; / ** * * @author hongliang.dinghl * Dom4j générer des documents XML et des documents XML Parse * / public class Dom4JDemo implémente xMLDocument {public void CreateExml (String filename) {document document = documentHelper.CreateDocument (); Element Employés = Document.Addelement ("Employés"); Elément Employee = Employés.Addelement ("Employé"); Nom de l'élément = employee.addelement ("name"); name.setText ("ddvip"); Element Sex = Employee.Addelement ("Sex"); Sex.setText ("M"); Âge de l'élément = employee.addelement ("âge"); Âge.setText ("29"); try {writer filewriter = new FileWriter (filename); Xmlwriter xmlwriter = new xmlwriter (filewriter); xmlwriter.write (document); xmlwriter.close (); } catch (ioException e) {System.out.println (e.getMessage ()); }} public void ParserXML (String FileName) {File inputXml = new File (FileName); SaxReader saxReader = new saxReader (); try {document document = saxReader.read (inputxml); Element Employés = document.getRootelement (); pour (iterator i = employés.ElementIterator (); i.hasnext ();) {Element Employee = (élément) i.next (); pour (iterator j = employee.elementIterator (); j.hasnext ();) {element node = (élément) j.next (); System.out.println (node.getName () + ":" + node.getText ()); }}} catch (documentException e) {System.out.println (e.getMessage ()); } System.out.println ("Dom4j PARSERXML"); }}4. JDom génère et parses XML
Afin de réduire la quantité de codage de DOM et de sax, JDom est apparu; Avantages: Principe 20-80, réduisant considérablement la quantité de code. Utiliser des occasions: les fonctions à implémenter sont simples, comme l'analyse, la création, etc., mais en bas, JDom utilise toujours des documents SAX (les plus couramment utilisés), DOM et XANAN.
import java.io.filenotfoundException; Importer java.io.fileOutputStream; Importer java.io.ioException; Importer java.util.list; import org.jdom.Document; import org.jdom.element; import org.jdom.jdomexception; import org.jdom.input.saxBuilder; import org.jdom.output.xmloutputter; / ** * * @author hongliang.dinghl * jdom générer et analyser les documents xml * * / public class jdomdemo implémente xMLDocument {public void createExml (String filename) {document de document; Élément root; root = nouvel élément ("employés"); document = nouveau document (racine); Elément Employee = nouvel élément ("Employé"); root.adddcontent (employé); Nom de l'élément = nouvel élément ("nom"); name.setText ("ddvip"); Employee.AddContent (nom); Élément sexe = nouvel élément ("sexe"); Sex.setText ("M"); Employee.AddContent (sexe); Élément Age = nouvel élément ("âge"); Âge.setText ("23"); Employee.AddContent (âge); Xmloutputter xmlout = new xmloutputter (); essayez {xmlout.output (document, nouveau fileoutputStream (nom de fichier)); } catch (filenotFoundException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); }} public void ParserXML (String FileName) {saxBuilder Builder = new saxBuilder (false); try {document document = builder.build (nom de fichier); Element Employés = document.getRootelement (); Liste EmployEList = Employeees.getChildren ("Employé"); pour (int i = 0; ielement employee = (élément) EmployElist.get (i); lister EmployeeInfo = Employee.getChildren (); pour (int j = 0; jSystem.out.println (((élément) employeeinfo.get (j)). getName () + ":" + (élément) employeeInfo.Get (j)). Getvalue (); (JDomexception e) {e.printStackTrace ();} Catch (ioException e) {e.printStackTrace ();Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.