DOM4J EINLEITUNG
DOM4J -Projektadresse: http://sourceforge.net/projects/dom4j/?source=Directory
DOM4J ist eine einfache Open -Source -Bibliothek für die Behandlung von XML, XPath und XSLT.
DOM4J verwendet DOM4J, nachdem das DOM4J-Projekt heruntergeladen, es entpackt und sein JAR-Paket (meine aktuelle Version heißt DOM4J-1.6.1.jar) zum Klassenpfad.
(Eigenschaften-> Java-Build-Pfad-> Externe Gläser hinzufügen ...).
Dann können Sie die API für die Programmierung verwenden.
Programmbeispiel 1
Das erste Programm verwendet Java -Code, um ein XML -Dokument zu generieren, und der Code lautet wie folgt:
paket com.example.xml.dom4j; import Java.io.FileOutputStream; Import Java.io.FileWriter; import org.dom4j.document; import org.dom4j.documenthel pro; org.dom4j.element; import org.dom4j. io .outputFormat; import org.dom4j.io.xmlwriter;/** * DOM4J Framework lernt, das DOM4J -Framework zu verwenden, um ein XML -Dokument und -ausgang zu erstellen und zu speichern * */public class dom4jtest1 {public static void Main (Strin G [] Argumente) löst eine Ausnahme aus {// Die erste Methode: Erstellen Sie ein Dokument und erstellen Sie ein Root -Element // ein Dokument erstellen: Verwenden Sie ein Helfer -Klassen -Dokument = documentHelper.Createdocument (); root = documentHelper.createelement ("St. udent"); document2 = documentHelp er.Createdocument (root2); Element WorldElement = Root2.add Element ("Welt"); .Writ E (Dokument); "Student.xml"), Format); FileWriter ("student2.xml"), Format);
Programmkonsolenausgabe:
<?
Ein generiertes XML -Dokument:
<?
Programmbeispiel 2
Programmbeispiel 2, lesen Sie das XML -Dokument und analysieren Sie es und geben Sie seinen Inhalt aus.
Erstens sind die zu analysierenden Dokumente wie folgt:
<? ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: : ::::::::::::::::::::::::::::::::::::::: /HALLO> <Hallo Name = "lisi3"> Hallo Text3 < /hello> <weltname = "Wangwu "> World text1 </world> <world name =" wangwu2 "> World text2 </world> <welt> world te Xt3 </world> </student> paket com.example.xml.dom4j; Import Java.io. Datei; Java.util.iterator; import Java.util.List; importieren Sie Javax.xml.Parsers .DocumentBuilder; Import Javax. .Dom4j.io.DomReader; import org.dom4j.io.saxread er;/** * DOM4J Framework Learning: Lesen und analysieren xml * * */public class Dom4jtest2 {public static void main (String [] args) Ausnahme {Ausnahme { SAXREADER SAXREADER = New SaxReader (); " + root.getName ()); // Erhalten Sie alle untergeordneten Elemente Liste <element> childlist = root.elements (); System. Out.println (" Total Child Count: " + Childlist.size ()); // GET Das untergeordnete Element eines bestimmten Namensliste <elements> Childlist2 = Root.elements ("Hallo"); Das angegebene Name Element Firstworldelement = root.element ("Welt"); AttributeValue ("Name")); Iterator iter = root.elementiterator (); println ("Domreader verwenden ----------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- DocumentBuilderFactory DBF = DocumentBuilderFactory.Newinstance (); w3c.dom.document sollte verwendet werden document2 = db.parse (neue Datei ("studle.xml")); Element rootElement = document3.get rootElement ();
Nachdem der Code ausgeführt wurde, ist die Ausgabe:
Wurzel: StudentStotal Child Count: 6Hello Kind: 3First World Attr: Name = Wangwu Iterative Ausgabe ------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------- Ader ----- ---------------------------------- ---------- ------------------ Wurzel: Schüler
SAX Parses XML
Im Folgenden sind die Schritte zur Implementierung der Analyse von Unternehmen in SAX aufgeführt
// Folgendes ist ein XMLReader, um (i) Schritt 1 zu analysieren: Erstellen Sie eine neue Fabrikklasse SaxarSerfactory, der Code lautet wie folgt:
SaxParSerFactory Factory = SAXParSerFactory.Newinstance ();
(2) Schritt 2: Lassen Sie die Fabrikklasse eine Saxser -SAX -Parserklasse generieren. Der Code lautet wie folgt:
Saxparser Parser = factory.newsaxParSer ();
(Iii) Schritt 3: Holen Sie sich eine XMLReader -Instanz von Saxpsrser, der Code ist wie folgt:
Xmlreader reader = parser.getXmlreader ();
(4) Schritt 4: Registrieren Sie den Handler, den Sie im XMLReader geschrieben haben.
Reader.SetContentHandler (dies);
(V) Schritt 5: Nach dem Umwandeln eines XML -Dokuments oder einer Ressource in einen InputStream -Stream, den Java verarbeiten kann, beginnt die Parsen offiziell und der Code lautet wie folgt:
Reader.Parse (neue InputSource (IS));
// Folgendes ist Saxarser zu verwenden, um (i) den ersten Schritt zu analysieren: Erstellen einer neuen Fabrikklasse SAXPARSERFACTORY, der Code lautet wie folgt:
SaxParSerFactory Factory = SAXParSerFactory.Newinstance ();
(2) Schritt 2: Lassen Sie die Fabrikklasse eine Saxser -SAX -Parserklasse generieren. Der Code lautet wie folgt:
Saxparser Parser = factory.newsaxParSer ();
(3) Schritt 3: Nach dem Umwandeln eines XML -Dokuments oder einer Ressource in einen InputStream -Stream, den Java verarbeiten kann, beginnt die Parsen offiziell und der Code lautet wie folgt:
Parser.Parse (ist dies);
Ich denke, jeder hat ContentHandler gesehen.
// Legen Sie ein Locator -Objekt fest, mit dem der Ort befindet
Public Void SetDocumentLocator (Locator Locator)
// Wird verwendet, um das Dokument -Parsing -Start -Ereignis zu behandeln
öffentliche void startDocument () löst Saxexception aus
// Verarbeiten Sie das Element Start -Ereignis, und Sie können den URI, den Elementnamen, die Attributklassentabelle und andere Informationen des Namespace erhalten, in dem sich das Element aus den Parametern befindet.
public void startElement (String namespacesuri, String Localname, String Qname, Attribute ATTS) löst Saxexception aus
// Behandle das Element -End -Ereignis, und Sie können den URI, den Elementnamen und andere Informationen des Namespace, in dem sich das Element aus den Parametern befindet, abrufen.
public void Endelement (String -Namespacesuri, String Localname, String Qname) löscht Saxexception aus
// Verarbeiten Sie den Charakterinhalt des Elements, und Sie können den Inhalt aus den Parametern abrufen
öffentliche void Charaktere (char [] ch, int start, int länge) löst Saxexception aus
Lassen Sie uns übrigens die Methoden in Xmlreader vorstellen.
// XML -Dokument -Parsing -Ereignis -ContentHandler registrieren und verarbeiten
Public Void SetContentHandler (ContentHandler -Handler)
// Starten Sie ein XML -Dokument an Parsen
Public void Parse (InputSorce Input) löst Saxexception aus
Ich habe ungefähr das Sprechen.
Paket Com.Example.Demo; ) {return _id; () {return _age;
Als nächstes möchten wir einen ContentHandler implementieren, um XML zu analysieren
Die Implementierung eines ContentHandlers erfordert im Allgemeinen die folgenden Schritte
1. Deklarieren Sie eine Klasse und erben Defaulthandler. DefaultHandler ist eine Basisklasse, die einfach einen ContentHandler implementiert. Wir müssen die Methode nur neu schreiben.
2. Schreiben Sie StartDocument () und Enddocument (). Im Allgemeinen wird die Initialisierung vor dem formalen Parsing in StartDocument () und die endgültige Arbeit in Enddocument () platziert.
3.. Oft werden einige Daten in dieser Funktion betrieben, indem der Wert des lokalenNamens beurteilt wird.
4. Schreiben Sie die Methode () um, die eine Rückrufmethode ist. Nachdem der Parser startElement () ausgeführt hat, wird diese Methode nach Analyse des Inhalts des Knotens ausgeführt, und der Parameter CH [] ist der Inhalt des Knotens.
5. Die Methode von Endelement () entspricht dem Startelement (). Die DefaultHandler und Rere schreiben die folgenden Methoden
Die öffentliche Klasse SAX_PARSERXML erweitert DefaultHandler { / *** Dieses Ereignis wird ausgelöst, wenn die Erklärung der XML-Datei analysiert wird. Methode Stub Super.StartDocument (); {// todo automatisch erzeugte Methode Stub Super.StartElement (URI, Lokalname, Qname, Attribute);} / ** * Dieses Ereignis wird beim Lesen eines Textelements ausgelöst. ] ch, int start, int länge) saxexception {// todo automatisch generierte Methode Stub Super.characters (CH, Start, Länge); @Override public void Endelement (String URI, String Localname, String Qname) löscht SaxException {// Todo automatisch generierter Methode Stub Super.endElement t (URI, Lokalname, Qname);
Zunächst erstellen wir eine Liste, um die analysierten Personendaten zu speichern
Liste <Person> Personen;
Aber? Wo initialisieren Sie? Wir können es in startDocument () initialisieren, da dieses Ereignis beim Parsen der Erklärung der XML -Datei ausgelöst wird. Es ist daher angemessener, sie hier zu setzen
/ *** Dieses Ereignis wird beim Parsen der Deklaration der XML-Datei ausgelöst. );
Als nächstes werden wir beginnen zu analysieren
/ *** Dieses Ereignis wird ausgelöst, wenn das Start-Tag eines Elements analysiert wird . Attribute.getValue ("ID"));
Im obigen Code repräsentiert LocalName den derzeit analysierten Elementnamen
// Schritt // 1. ** * Dieses Ereignis wird beim Lesen eines Textelements ausgelöst. , start, Länge); Equals ("Name") {// den abgerufenen Wert zu der Person -Objektperson.
Als nächstes müssen Sie tun, wenn das Tag endet
/ *** Dieses Ereignis wird ausgelöst, wenn das End-Tag gelesen wird , localname, qname); ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::: "";
Die Analyse ist wahrscheinlich der Prozess
1. Die Startelementmethode wird zu Beginn eines Elements aufgerufen.
2. Die Zeichenmethode wird als nächstes aufgerufen, mit dem der Wert des Elements erhalten werden kann.
3. Wenn ein Element endet, wird die Endelement -Methode nach Abschluss des Parsens aufgerufen.
public list <Person> readXML (InputStream ist) {SaxSerfactory Factory = SaxSerfactory.NewinStance (); zweite Methode XMLReader Reader = Parser.getXMlreader (); Rückkehrer;
Der obige Code erklärt nicht das Eingabebestand und analysiert den Inhalt, nachdem ich den Code gelesen habe.
Paket Com.Example.Demo.utils; .xml.sax.attributes; . SAXPARSER PARSER = FACTORY.NEWSAXPARSER (); (Neue InputSource (IS)); Sie können einige Initialisierungsarbeiten erledigen** / @Override public void startDocument () löst SaxException {// todo automatisch generierte Methode Stub Super.StartDocument () aus; * * Dieses Ereignis wird ausgelöst, wenn das Start-Tag eines Elements analysiert wird StartElement (URI, Lokalname, Qname, Attribute), wenn Sie lesen, dass es sich um ein Person -Tag handelt, speichern Sie, wenn (localname.equals ("Person") {Person = new Person () (Person.set_id (Attribut utes) .GetValue ("ID")); löscht SaxExc-Episode {// Todo automatisch generierte Methode Stub Super.Characters (CH, Start, Länge); Start, Länge); "Alter") {Person. löscht SAXExc-Episode {// Todo auto- generierte Methode Stub Super.endElement (URI, Lokalname, Qname); Person! = null) {p ersons.add (Person);
Schreiben Sie eine Methode, um diese Klasse aufzurufen
Liste <Person> persons = new SAX_PARSERXML (). ReadXml (IS); ); .get_age () + "/n");
Wenn Sie die folgende Schnittstellenbeschreibung sehen, war die Analyse erfolgreich ~
Zusammenfassung:
DOM (Dateiobjektmodell) Parsing: Der Parser liest das gesamte Dokument und erstellt dann eine Speicher-Resident-Baumstruktur, und der Code kann diese Baumstruktur gemäß der DOM-Schnittstelle bedienen.
Vorteile: Das gesamte Dokument wird in den Speicher gelesen, bequem zu bedienen: Unterstützt verschiedene Funktionen wie Änderungen, Löschung sowie Fortpflanzung und Anordnung.
Nachteile: Lesen Sie das gesamte Dokument in den Speicher, behalten Sie zu viele unnötige Knoten, verschwenden Sie Speicher und Raum.
Legen verwenden: Sobald das Dokument gelesen wurde, muss das Dokument mehrmals betrieben werden und wenn die Hardware -Ressourcen ausreichen (Speicher, CPU).
Um die bei DOM -Parsen vorhandenen Probleme zu lösen, tritt das SAX -Parsing auf. Seine Eigenschaften sind:
Vorteile: Es ist nicht erforderlich, das gesamte Dokument zu implementieren, das weniger Ressourcen einnimmt. Insbesondere in eingebetteten Umgebungen wie Android wird dringend empfohlen, SAX -Parsen zu verwenden.
Nachteile: Im Gegensatz zur DOM -Parsen sind die Daten nicht anhaltend. Wenn die Daten nach dem Ereignis nicht gespeichert werden, gehen die Daten verloren.
Anlass zum Nutzen: Die Maschine hat Leistungsbeschränkungen