Zusammenfassung verschiedener Möglichkeiten, XML durch Java zu analysieren
Der erste Typ: DOM.
Der vollständige Name von DOM ist das Dokumentobjektmodell, das das Dokumentobjektmodell ist. In einer Anwendung konvertiert der DOM-basierte XML-Analysator ein XML-Dokument in eine Sammlung von Objektmodellen (normalerweise als DOM-Baum bezeichnet). Die Anwendung implementiert den Betrieb von XML -Dokumentdaten über Operationen in diesem Objektmodell. Über die DOM -Schnittstelle kann eine Anwendung jederzeit auf jeden Teil der Daten in einem XML -Dokument zugreifen. Daher wird dieser Mechanismus unter Verwendung der DOM -Schnittstelle auch als Zufallszugriffsmechanismus bezeichnet.
Die DOM -Schnittstelle bietet eine Möglichkeit, über ein hierarchisches Objektmodell auf XML -Dokumentinformationen zuzugreifen. Diese hierarchischen Objektmodelle bilden einen Knotenbaum basierend auf der XML -Dokumentstruktur. Unabhängig von der Art der im XML -Dokument beschriebenen Informationen, sogar Tabellierungsdaten, Projektlisten oder einem Dokument, befindet sich das mit der DOM generierte Modell in Form eines Knotenbaums. Das heißt, das DOM erzwingt die Verwendung eines Baummodells, um in einem XML -Dokument auf Informationen zuzugreifen. Da XML im Wesentlichen eine hierarchische Struktur ist, ist diese Beschreibungsmethode sehr effektiv.
Die vom DOM -Baum bereitgestellte Zufallszugriffsmethode bringt die Entwicklung von Anwendungen mit großer Flexibilität und kann den Inhalt im gesamten XML -Dokument willkürlich steuern. Da der DOM -Analysator das gesamte XML -Dokument in einen DOM -Baum umwandelt und es in den Speicher bringt, ist die Speicheranforderung relativ hoch, wenn das Dokument größer ist oder die Struktur relativ komplex ist. Darüber hinaus ist das Durchqueren von Bäumen mit komplexen Strukturen auch zeitaufwändiger Betrieb. Daher haben DOM -Analysatoren relativ hohe Anforderungen an die Maschinenleistung und ihre Implementierungseffizienz ist nicht sehr ideal. Da die Idee der vom DOM -Analysator angewendeten Baumstruktur jedoch mit der Struktur des XML -Dokuments übereinstimmt und angesichts des von Zufallszugriffs mitgelösten Komforts einen weiten Bereich des nützlichen Wertes hat.
Import Java.io.file; importieren javax.xml.parsers.documentBuilder; importieren javax.xml.parsers.documentBuilderFactory; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.nodelist; public class domTest1 {public static void main (String [] args) löst Ausnahme aus. // system.out.println ("Klasse name:" + dbf.getClass (). GetName ()); // Schritt 2: Holen Sie sich den spezifischen DOM -Parser -DocumentBuilder db = dbf.newdocumentBuilder (); // system.out.println ("Klasse name:" + db.getClass (). GetName ()); // Schritt 3: Analysieren Sie ein XML -Dokument und erhalten Sie das Dokumentobjekt (Root Node) Dokument Dokument = db.parse (neue Datei ("Candidate.xml"); Nodelist list = document.getElementsByTagName ("Person"); für (int i = 0; i <list.getLength (); i ++) {Element Element = (Element) list.Item (i); String content = element.getElementsByTagName ("name"). Item (0) .getFirstchild (). GetNodeValue (); System.out.println ("Name:" + Inhalt); content = element.getElementsByTagName ("Adresse"). Artikel (0) .GetFirstchild (). getNodeValue (); System.out.println ("Adresse:" + Inhalt); content = element.getElementsByTagName ("tel"). item (0) .getFirstchild (). getNodeValue (); System.out.println ("Tel:" + Inhalt); content = element.getElementsByTagName ("fax"). item (0) .getFirstchild (). getNodeValue (); System.out.println ("Fax:" + Inhalt); content = element.getElementsByTagName ("E -Mail"). Artikel (0) .GetFirstchild (). getNodeValue (); System.out.println ("E -Mail:" + Inhalt); System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Import Java.io.file; importieren javax.xml.parsers.documentBuilder; importieren 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; / ** * Verwenden Sie rekursiv, um ein bestimmtes XML -Dokument zu analysieren und seinen Inhalt in die Befehlszeile auszugeben DocumentBuilder db = dbf.newdocumentBuilder (); Document doc = db.parse (neue Datei ("student.xml")); // Root -Element -Knoten -Element rot telefonieren = doc.getDocumentElement (); Parseelement (Wurzel); } private statische void parseelement (Elementelement) {String tagname = element.getNodename (); Nodelist Kinder = element.getchildnodes (); System.out.print ("<" + tagname); // Das benannte Nodemap -Objekt, das aus allen Attributen des Elementelements besteht, muss auf dem benannten Nodemap map = element.getAttributes () beurteilt werden; // Wenn das Element Attribute hat, wenn (null! String attrName = attr.getName (); String attrValue = attr.getValue (); System.out.print ("" + attrName + "=/" " + attrValue +"/""); }} System.out.print (">"); für (int i = 0; i <chirids.getLength (); i ++) {node node = children.item (i); // den Typ des Knotens kurz nodetype = node.getNodetype () abrufen; if (nodetype == node.element_node) {// Es ist ein Element, weiterhin rekursiv ((Element) Knoten); } else if (nodetype == node.text_node) {// rekursiv system.out.print (node.getNodeValue ()); } else if (nodetype == node.comment_node) {System.out.print ("<!-"); Kommentar Kommentar = (Kommentar) Knoten; // Inhaltsstring -String data = comment.getData (); System.out.print (Daten); System.out.print ("->"); }} System.out.print ("</" + tagname + ">"); }}SAX: Der vollständige Name von SAX ist eine einfache API für XML, die die XML -einfache Anwendungsprogrammschnittstelle ist. Im Gegensatz zu DOM ist der von SAX bereitgestellte Zugriffsmodus ein sequentieller Modus, der eine Möglichkeit ist, XML -Daten schnell zu lesen und zu schreiben. Wenn ein XML -Dokument mit dem SAX -Analysator analysiert wird, wird eine Reihe von Ereignissen ausgelöst und die entsprechenden Ereignisverarbeitungsfunktionen aktiviert. Die Anwendung kann über diese Ereignisbearbeitungsfunktionen auf das XML -Dokument zugreifen. Daher wird die SAX-Schnittstelle auch als ereignisgesteuerte Schnittstelle bezeichnet.
Import Java.io.file; 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; public class saxtest1 {public static void main (String [] args) löst eine Ausnahme aus {// Schritt 1: Erhalten Sie die SAX Parser Factory Instance SAXPARSERFACTORY FACTORY = SAXPARSERFACTORY.NEWINSTANCE (); // Schritt 2: Holen Sie sich die SAX -Parser -Instanz SAXPARSER PARSER = FACTORY.NEWSAXPARSER (); // Schritt 3: Starten Sie Parser.Parse (neue Datei ("student.xml"), new MyHandler ()); }} class MyHandler erweitert DefaultHandler {@Override public void startDocument () löscht SaxException {System.out.println ("Parse begonnen"); } @Override public void enddocument () löst SaxException aus {System.out.println ("Parse fertig"); } @Override public void startElement (String URI, String localname, String QName, Attribute Attribute) löst SaxException aus {System.out.println ("Startelement"); } @Override public void EndElement (String URI, String LocalName, String Qname) löst SaxException aus {System.out.println ("Finish -Element"); }} Import Java.io.file; import Java.util.stack; 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; public class saxtest2 {public static void main (String [] args) löst eine Ausnahme aus {SAXPARSERFACTORY FACTORY = SAXPARSERFACTORY.NEWINSTANCE (); Saxparser Parser = factory.newsaxParSer (); Parser.Parse (neue Datei ("student.xml"), new MyHandler2 ()); }} class MyHandler2 erweitert DefaultHandler {private stack <string> stack = new stack <string> (); privater Zeichenfolge Name; privates String -Geschlecht; privates Stringalter; @Override public void startElement (String URI, String localname, String Qname, Attribute Attribute) löst SaxException {stack.push (qname) aus; für (int i = 0; i <attributes.getLength (); i ++) {String attrName = attributes.getQname (i); String attrValue = Attribute.getValue (i); System.out.println (attrName + "=" + attrValue); }} @Override public void Zeichen (char [] ch, int start, int länge) löscht saxException {string tag = stack.peek (); if ("name" .equals (tag)) {name = new String (ch, start, länge); } else if ("Geschlecht" .Eequals (Tag)) {Geschlecht = new String (ch, start, Länge); } else if ("ay" .equals (Tag)) {ay = new String (ch, start, länge); }} @Override public void EndElement (String URI, String LocalName, String QName) löst SaxException {stack.pop (); // Geben Sie an, dass das Element analysiert wurde und aus dem Stapel herausspringen muss, wenn ("student" .equals (qname)) {System.out.println ("Name:" + Name); System.out.println ("Geschlecht:" + Geschlecht); System.out.println ("Alter:" + Alter); System.out.println (); }}}Jdom:
JDOM ist ein Open -Source -Projekt, das auf einer Baumstruktur basiert und verwendet die reine Java -Technologie, um Parsing, Generieren, Serialisierungen und verschiedene Operationen in XML -Dokumenten zu implementieren. (http://jdom.org)
• JDOM dient direkt Java -Programmierung. Es verwendet viele Merkmale der leistungsstärkeren Java -Sprache (Methodenüberladung, Sammelkonzepte usw.), um die Funktionen von SAX und DOM effektiv zu kombinieren.
• JDOM ist eine neue API -Funktion zum Lesen, Schreiben und Betrieb von XML in Java -Sprache. Diese API -Funktionen sind maximal unter der Prämisse von Direktheit, Einfachheit und Effizienz optimiert.
Jdom erstellen 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; public class jdomTest1 {public static void main (String [] args) löst Ausnahme aus {document document = new document (); Element root = new Element ("root"); document.addContent (root); Kommentar Kommentar = neuer Kommentar ("Dies ist meine Kommentare"); root.addContent (Kommentar); Element E = neues Element ("Hallo"); E.SetatTribute ("Sohu", "www.sohu.com"); root.addContent (e); Element E2 = neues Element ("Welt"); Attribut attr = neues Attribut ("Test", "hehe"); e2.setattribute (attr); E.AddContent (E2); e2.addContent (neues Element ("AAA"). Format format = format.getprettyFormat (); format.setIndent (""); // format.setencoding ("gbk"); XMloutputter out = new Xmloutputter (Format); out.output (Dokument, neuer FileWriter ("jdom.xml")); }}Jdom analysieren xml
Import Java.io.file; importieren java.io.fileoutputStream; importieren 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; public class jdomTest2 {public static void main (String [] args) löst eine Ausnahme aus {SAXBuilder Builder = new Saxbuilder (); Document doc = builder.build (neue Datei ("jdom.xml")); Element Element = doc.getrootelement (); System.out.println (element.getName ()); Element Hello = element.getCild ("Hallo"); System.out.println (hello.getText ()); Listlist = hello.getAttributes (); für (int i = 0; i <list.size (); i ++) {Attribut attr = (Attribut) list.get (i); String attrName = attr.getName (); String attrValue = attr.getValue (); System.out.println (attrName + "=" + attrValue); } hello.removechild ("Welt"); XMLoutputter out = new Xmloutputter (format.getRettyFormat (). SetIndent ("")); out.output (doc, neuer FileOutputStream ("jdom2.xml")); }}Dom4j
importieren 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; public class test1 {public static void main (String [] args) löst eine Ausnahme aus {// ein Dokument erstellen und den Stammelementknoten des Dokuments festlegen: Die erste Methode // document = documentHelper.Createdocument (); // // element root = documentHelper.createelement ("Student"); // // document.setrootelement (root); // Erstellen Sie ein Dokument und setzen Sie den Root -Element -Knoten des Dokuments: Das zweite Methodenelement root = documentHelper.createelement ("Student"); Document document = documentHelper.createdocument (root); root.addattribute ("Name", "Zhangsan"); Element HelloElement = root.addelement ("Hallo"); Element WorldElement = root.addelement ("Welt"); HelloElement.setText ("Hallo"); WorldElement.setText ("Welt"); HelloElement.addattribute ("Alter", "20"); Xmlwriter xmlwriter = new XmlWriter (); XMLWriter.Write (Dokument); OutputFormat format = new OutputFormat ("", true); Xmlwriter xmlwriter2 = neuer xmlwriter (neuer FileOutputStream ("student2.xml"), Format); xmlWriter2.Write (Dokument); Xmlwriter xmlwriter3 = neuer XMLWriter (neuer FileWriter ("student3.xml"), Format); xmlWriter3.Write (Dokument); xmlWriter3.CLOSE (); }} Import Java.io.file; Import Java.util.iterator; importieren java.util.list; importieren javax.xml.parsers.documentBuilder; importieren javax.xml.parsers.documentBuilderFactory; import org.dom4j.document; import org.dom4j.element; import org.dom4j.io.domreader; import org.dom4j.io.saxreader; public class test2 {public static void main (String [] args) löst eine Ausnahme aus {SAXReader SAXReader = new Saxreader (); Document doc = saxreader.read (neue Datei ("student2.xml")); Element root = doc.getrootelement (); System.out.println ("Root -Element:" + root.getName ()); Liste ChildList = root.elements (); System.out.println (Childlist.size ()); Liste Childlist2 = root.elements ("Hallo"); System.out.println (ChildList2.size ()); Element first = root.element ("Hallo"); System.out.println (first.attributeValue ("Alter")); für (iterator iter = root.elementiterator (); iter.hasnext ();) {Element e = (Element) iter.Next (); System.out.println (e.attributeValue ("Alter")); } System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ DocumentBuilderFactory.Newinstance (); RootElement = 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; public class test3 {public static void main (String [] args) löst Ausnahme aus {document document = new document (); Element root = new Element ("Kontaktliste"). SetAttribute (neues Attribut ("Firma", "Gruppe A")); document.addContent (root); Element contactPerson = neues Element ("Kontakt"); root.addContent (contactPerson); contactPerson .AddContent (neues Element ("Name"). SetText ("Zhang san") .AddContent (neues Element ("Company"). SetText ("Company") .AddContent (New Element ("Tel"). SetText ("021-5555666666666666").). Element ("Street"). SetText ("5th Street") .AddContent (neues Element ("Stadt"). SetText ("Shanghai")) .AddContent (neues Element ("Provinz"). SetText ("Shanghai")); Xmloutputter output = new XmLoutputter (format.getprettyFormat () .setIndent ("). SetEnCoding (" gbk ")); output.output (Dokument, neuer Filewriter (" contact.xml "));}}