XML ist jetzt zu einem gemeinsamen Datenaustauschformat geworden. Sein plattformunabhängiger, sprachunabhängiger und systemunabhängiger unabhängiger, der Datenintegration und Interaktion bringt große Bequemlichkeit. Für das Syntaxwissen und die technischen Details von XML selbst müssen Sie relevante technische Dokumente lesen. Der hier enthaltene Inhalt umfasst DOM (Dokumentobjektmodell), DTD (Dokumenttypdefinition), SAX (einfache API für XML), XSD (XML -Schema -Definition), XSLT (Extensible Stylesheet -Sprachtransformationen). Weitere Informationen finden Sie im Dokument der W3C Official Website http://www.w3.org für weitere Informationen.
XML -Parsingmethoden sind in verschiedenen Sprachen gleich, aber die Implementierungssyntax ist unterschiedlich. Es gibt zwei grundlegende Analysemethoden, eine wird als SAX bezeichnet und der andere wird als DOM bezeichnet. SAX basiert auf der Ereignisstromanalyse und DOM basiert auf der XML -Dokumentbaumstrukturanalyse. Angenommen, der Inhalt und die Struktur unserer XML sind wie folgt:
<?
In diesem Artikel wird die Java -Sprache verwendet, um die Erzeugung und Parsen von XML -Dokumenten von DOM und SAX zu implementieren.
Definieren Sie zunächst eine Schnittstelle zum Betrieb von XML -Dokumenten XMLDOCUMEND, das die Schnittstelle zum Festlegen und Parsen von XML -Dokumenten definiert.
/ **** @Author Hongliang.dinghl* Definieren Sie die Schnittstelle zwischen XML -Dokument -Erfindung und Parsen*/ public interface xmldocument {/ *** XML -Dokument erstellen* @param FileName -Datei Vollständige Pfadname*/ public void createxml (String FileName); / *** Parse XML -Dokument* @param Dateiname -Datei Vollständiger Pfadname*/ public void ParserXML (String -Dateiname); } 1. DOM generiert und analysiert XML -Dokumente
Definiert eine Reihe von Schnittstellen für die analysierte Version des XML -Dokuments. Der Parser liest das gesamte Dokument und erstellt dann eine Speicher-Resident-Baumstruktur, und der Code kann dann die DOM-Schnittstelle verwenden, um diese Baumstruktur zu bedienen. Vorteile: Der gesamte Dokumentbaum befindet sich im Speicher, der leicht zu bedienen ist. Unterstützt verschiedene Funktionen wie Löschung, Modifikation und Umbauung; Nachteile: Das gesamte Dokument wird in Speicher (einschließlich nutzloser Knoten), Zeit und Raum verschwendet; In Verwendung: Sobald das Dokument analysiert ist, ist es notwendig, auf diese Daten zuzugreifen. ausreichende Hardware -Ressourcen (Speicher, CPU).
import Java.io.FileInputStream; importieren java.io.filenotfoundException; importieren java.io.fileoutputStream; importieren java.io.ioException; importieren java.io.inputstream; Import Java.io.printwriter; importieren javax.xml.parsers.documentBuilder; importieren javax.xml.parsers.documentBuilderFactory; importieren javax.xml.parsers.parserConfigurationException; importieren javax.xml.transform.outputkeys; importieren javax.xml.transform.transformer; importieren javax.xml.transform.transformerconfigurationException; importieren javax.xml.transform.transformeException; importieren javax.xml.transform.transformerFactory; 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 -Generation und Parsen XML -Dokumente */ öffentliche Klasse Domdemo implementiert xmldocument {privates Dokument; privater String -Dateiname; 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 createxml (String -Dateiname) {Element root = this.document.createelement ("Mitarbeiter"); this.document.Appendchild (root); Element Employee = this.document.CreateElement ("Mitarbeiter"); Element name = this.document.createelement ("Name"); name.AppendChild (this.document.createTextNode ("Ding Hongliang")); Mitarbeiter.AppendChild (Name); Element sex = this.document.createelement ("Sex"); sex.appendchild (this.document.createTextNode ("m")); Mitarbeiter.AppendChild (Sex); Element Age = this.document.createelement ("Alter"); Age.AppendChild (this.document.createTextNode ("30")); Mitarbeiter.AppendChild (Alter); Root.AppendChild (Mitarbeiter); TransformerFactory tf = transformerFactory.Newinstance (); try {Transformator transformator = tf.newtransformer (); DomSource Source = New DomSource (Dokument); Transformator.SetoutputProperty (Outputkeys.encoding, "GB2312"); Transformator.SetoutputProperty (outputkeys.indent, "yes"); Pressewriter PW = neuer Pressewriter (neuer FileOutputStream (Dateiname)); StreamResult result = new StreamResult (PW); Transformator.transform (Quelle, Ergebnis); System.out.println ("XML -Datei erfolgreich generieren!"); } catch (TransformerConfigurationException e) {System.out.println (e.getMessage ()); } catch (illegalArgumentException e) {System.out.println (e.getMessage ()); } catch (FilenotFoundException e) {System.out.println (e.getMessage ()); } catch (transformException e) {System.out.println (e.getMessage ()); }} public void parserxml (String -Dateiname) {try {documentBuilderFactory dbf = documentBuilderFactory.newinstance (); DocumentBuilder db = dbf.newdocumentBuilder (); Document document = db.parse (Dateiname); Nodelist Employees = document.getChildnodes (); für (int i = 0; i <Mitarbeiter.getLength (); i ++) {node Employee = Mitarbeiter Nodelist Employeeinfo = Mitarbeiter.getChildnodes (); für (int j = 0; j <EmploymeroeInfo.getLength (); j ++) {node node = mopedeInfo.Item (j); Nodelist Employeemeta = node.getChildnodes (); für (int k = 0; k <Employeemeta.getLength (); K ++) {System.out.println (Employeemeta.Item (k) .GetNoDeName () + ":" + Employeemeta.Item (k) .GetTextContent ()); }}} System.out.println ("parSermeta.Item (k) .GETTEXTCONTENT ());} catch (FilenotFoundException e) {System.out.println (e.getMessage ());} catch (ParserConfiguration E) {System.OUT.OUT.Println (E.GetMessage (); (ParserSconFigurationException E) {System.out.println (E.getMessage ()); 2. SAX erzeugt und analysiert XML -Dokumente
Um das DOM -Problem zu lösen, erscheint SAX. Sax, ereignisgetrieben. Wenn der Parser den Beginn eines Elements, das Ende eines Elements, den Beginn oder das Ende eines Dokuments usw. entdeckt, sendet er Ereignisse, und der Programmierer schreibt Code, um auf diese Ereignisse zu antworten und die Daten zu speichern. Vorteile: Es ist nicht erforderlich, das gesamte Dokument im Voraus einzugeben, sondern weniger Ressourcen. Der SAX -Parser -Code ist kleiner als der DOM -Parser -Code, der für Applet und Download geeignet ist. Nachteile: nicht persistent; Nach einem Ereignis gehen die Daten verloren, wenn Daten nicht gespeichert werden. Staatenlosigkeit; Aus dem Ereignis kann nur Text erhalten werden, aber er weiß nicht, zu welchem Element der Text gehört; Nutzungsanlässe: Applet; Es ist nur eine geringe Menge an Inhalten aus dem XML -Dokument erforderlich und kehrt selten auf den Zugriff zurück. Maschinenspeicher ist niedrig;
import Java.io.FileInputStream; importieren java.io.filenotfoundException; importieren java.io.ioException; importieren java.io.inputstream; importieren javax.xml.parsers.parserConfigurationException; importieren javax.xml.parsers.saxparser; importieren javax.xml.parsers.saxparserFactory; import org.xml.sax.attributes; import org.xml.sax.saxexception; import org.xml.sax.helpers.defaultHandler; / ** * * @Author Hongliang.dinghl * SAX Dokument analysieren } public void ParserxMl (String -Dateiname) {SAXPARSERFACTORY SAXFAC = SAXPARSERFACTORY.NeWInstance (); probieren Sie {saxparser saxparser = saxfac.newsaxparser (); InputStream ist = new FileInputStream (Dateiname); SaxParser.Parse (ist, New MysaxHandler ()); } catch (ParserConfigurationException e) {e.printstacktrace (); } catch (saxException e) {e.printstacktrace (); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} Klasse mySaxHandler erweitert DefaultHandler {boolean hasAttribute = false; Attribute Attribute = null; public void startDocument () löscht SaxException {System.out.println ("Das Dokument hat mit dem Drucken begonnen"); } public void enddocument () löst SaxException aus {System.out.println ("Das Dokument hat gedruckt"); } public void startElement (String URI, String Localname, String QName, Attribute Attribute) löst SaxException {if (qname.equals ("Mitarbeiter")) {return; } if (qname.equals ("Mitarbeiter") {System.out.println (qname); } if (attribute.getLength ()> 0) {this.attributes = Attribute; this.hasattribute = true; }} public void endElement (String uri, String localname, String qname) löscht SaxException {if (hasAttribute && (Attribute! = null)) {for (int i = 0; i <attributes.getLenGEN (); }}} public void Zeichen (char [] ch, int start, int länge) löscht saxException {System.out.println (neue String (ch, start, Länge)); }} Paket com.alisoft.facepay.framework.bean; import Java.io.FileInputStream; importieren java.io.filenotfoundException; importieren java.io.ioException; importieren java.io.inputstream; importieren javax.xml.parsers.parserConfigurationException; importieren javax.xml.parsers.saxparser; importieren javax.xml.parsers.saxparserFactory; import org.xml.sax.attributes; import org.xml.sax.saxexception; import org.xml.sax.helpers.defaultHandler; / ** * * @Author Hongliang.dinghl * SAX Dokument analysieren } public void ParserxMl (String -Dateiname) {SAXPARSERFACTORY SAXFAC = SAXPARSERFACTORY.NeWInstance (); probieren Sie {saxparser saxparser = saxfac.newsaxparser (); InputStream ist = new FileInputStream (Dateiname); SaxParser.Parse (ist, New MysaxHandler ()); } catch (ParserConfigurationException e) {e.printstacktrace (); } catch (saxException e) {e.printstacktrace (); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }}} Klasse mySaxHandler erweitert DefaultHandler {boolean hasAttribute = false; Attribute Attribute = null; public void startDocument () löscht SaxException {System.out.println ("Das Dokument hat mit dem Drucken begonnen"); } public void enddocument () löst SaxException aus {System.out.println ("Das Dokument hat gedruckt"); } public void startElement (String URI, String Localname, String QName, Attribute Attribute) löst SaxException {if (qname.equals ("Mitarbeiter")) {return; } if (qname.equals ("Mitarbeiter") {System.out.println (qname); } if (attribute.getLength ()> 0) {this.attributes = Attribute; this.hasattribute = true; }} public void endElement (String uri, String localname, String qname) löscht SaxException {if (hasAttribute && (Attribute! = null)) {for (int i = 0; i <attributes.getLenGEN (); }}} public void Zeichen (char [] ch, int start, int länge) löscht saxException {System.out.println (neue String (ch, start, Länge)); }}3.. DOM4J erzeugt und analysiert XML -Dokumente
DOM4J ist eine sehr, sehr exzellente Java XML -API mit hervorragender Leistung, leistungsstarker Funktionen und äußerst einfach zu bedienen, und es ist auch eine Open -Source -Software. Heutzutage können Sie sehen, dass immer mehr Java -Software DOM4J zum Lesen und Schreiben von XML verwendet. Es ist besonders erwähnenswert, dass selbst Suns Jaxm DOM4J verwendet.
Import Java.io.file; Import Java.io.FileWriter; importieren java.io.ioException; Import Java.io.Writer; Import 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 generieren XML -Dokumente und parse xml dokumente Element Employees = Document.AddElement ("Mitarbeiter"); Element Employee = Mitarbeiter.Addelement ("Mitarbeiter"); Elementname = Mitarbeiter.Addelement ("Name"); name.setText ("ddvip"); Element Sex = Mitarbeiter.Addelement ("Sex"); sex.setText ("m"); Element Age = Employee.Addelement ("Alter"); Age.SetText ("29"); try {writer fileWriter = new FileWriter (Dateiname); Xmlwriter xmlwriter = new XMLWriter (FileWriter); XMLWriter.Write (Dokument); xmlwriter.close (); } catch (ioException e) {System.out.println (e.getMessage ()); }} public void parserxml (String -Dateiname) {Datei inputxml = new Datei (Dateiname); Saxreader Saxreader = neuer Saxreader (); try {document document = saxreader.read (inputxml); Element Employees = document.getRootelement (); für (iterator i = Mitarbeiter für (Iterator j = Mitarbeiter.Elementiterator (); J.HasNext ();) {Element node = (Element) J.Next (); System.out.println (node.getName ()+":"+node.getText ()); }}} catch (documentException e) {System.out.println (e.getMessage ()); } System.out.println ("Dom4j Parserxml"); }}4. Jdom erzeugt und analysiert XML
Um die Codierungsmenge von DOM und SAX zu reduzieren, ist JDOM erschienen; Vorteile: 20-80 Prinzip, die die Codemenge stark verringert. Verwenden Sie Anlässe: Die Funktionen, die implementiert werden sollen, sind einfach, z. B. Parsen, Erstellen usw., aber unten verwendet JDOM SAX (am häufigsten verwendete), DOM- und Xanan -Dokumente.
importieren java.io.filenotfoundException; importieren java.io.fileoutputStream; importieren java.io.ioException; importieren 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 generieren und analysieren xml -Dokumente Elementwurzel; root = neues Element ("Mitarbeiter"); document = neues dokument (root); Element Employee = New Element ("Mitarbeiter"); Root.AddContent (Mitarbeiter); Elementname = neues Element ("Name"); name.setText ("ddvip"); Mitarbeiter.AddContent (Name); Element Sex = neues Element ("Sex"); sex.setText ("m"); Mitarbeiter.AddContent (Sex); Element Age = neues Element ("Alter"); Age.SetText ("23"); Mitarbeiter.AddContent (Alter); XmLoutputter xmlout = new Xmloutputter (); try {xmlout.output (Dokument, neuer FileOutputStream (Dateiname)); } catch (FilenotFoundException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }} public void parserxml (String -Dateiname) {SAXBuilder Builder = new Saxbuilder (false); try {document document = builder.build (Dateiname); Element Employees = document.getRootelement (); List posteelist = Employeees.getchildren ("Mitarbeiter"); für (int i = 0; ielement Employee = (element) popmenteelist.get (i); listene -Mitarbeiterliste = Mitarbeiter (Jdomexception e) {e.printstacktrace ();Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.