1. Vorwort
DOM4J ist eine sehr hervorragende Java -Open -Source -API, die hauptsächlich zum Lesen und Schreiben von XML -Dokumenten verwendet wird, mit hervorragender Leistung, leistungsstarken Funktionen und sehr bequemer Verwendung. Darüber hinaus wird XML häufig für Datenaustauschträger verwendet, z.
2. Vorbereitungsbedingungen
Dom4j.jar
Download -Adresse: http://sourceforge.net/projects/dom4j/
3. Verwenden Sie DOM4J zum Üben
1. Analyse des XML -Dokuments
Implementierungsideen:
<1> Nach dem Lesen des XML -Pfades wird er an den Sachsenreader übergeben und gibt ein Dokument -Dokument -Objekt zurück.
<2> Betreiben Sie dieses Dokumentobjekt dann, um die Informationen der folgenden Knoten und Kinder zu erhalten.
Der spezifische Code lautet wie folgt:
Import Java.io.file; JavaioFileInputStream importieren; Javaioinputstream importieren; Javautiliterator importieren; Javautillist importieren; import orgdom4jdocument; import orgdom4jdocumentHelper; import orgdom4jelement; import orgdom4jiosaxreader; /** * Verwenden Sie DOM4J, um XML -Dokumente zu parieren // InputStream InputStream = thisGetClass () getResourceAsStream ("/modulexml"); // Sie können XML auch basierend auf dem relativen Pfad der kompilierten Datei der Klasse basieren // Erstellen Sie einen Saxreader -Leser, der speziell zum Lesen von XML Saxreader Saxreader = new Saxreader () verwendet wird. // Gemäß der Read -Rewriting -Methode von Saxreader kann sie über den Eingabestream inputStream oder über das Dateiobjekt // document document = saxreaderread (InputStream) gelesen werden. Document document = SAXREADERREAD (neue Datei ("d:/project/dynamicWeb/src/ressourcen/modulexml"); // Der absolute Pfad der Datei muss angegeben werden // Zusätzlich kann der von DocumentHelper bereitgestellte XML -Konverter auch verwendet werden. // document document = documentHelperParSetExt ("<? Xml Version =/" 0/"coding =/" utf-8/"?> <Modules id =/" 123/"> <module> Dies sind die Textinformationen des Modul-Tags </modul> </modules>"); // das Stammknoten -Objektelement rootElement = documentGetRoTElement () abrufen; SystemOutprintln ("Root -Knotenname:" + rootElementGetName ()); // Nehmen Sie den Knotennamen SystemOutprintln ("Wie viele Attribute hat der Root -Knoten:" + RootElementAtTributeCount ()); // Die Anzahl der Node -Attribute SystememoutPrintln ("Idel -ID -Attribute") ("Idel."). Der Wert des Knotenattribut -ID -Systems Systememoutprintln ("Text im Stammknoten:" + rootElementGetText (); // Wenn das Element Kinder hat, gibt es eine leere Zeichenfolge zurück, ansonsten wird der Text im Knoten zurückgegeben. SystemOutprintln ("Text (1):" + RootElementGetTextTRIM ()); // Was entfernt wird, ist der Registerkarteschlüssel und Zeilenumbruch zwischen dem Tag und dem Tag usw., nicht der Speicherplatz vor und nach dem Inhalt systemOutprintln ("Textinhalt des Root -Knoten -Knotens:" + RootelementGetStringstringValue ()); // Geben Sie die Textinformationen aller untergeordneten Knoten rekursiv auf den aktuellen Knoten zurück. // Kinderknoten Element Element = RootElementElement ("Modul") erhalten; if (element! Es gibt keine direkte JavalangnullPointerexception für einen bestimmten Knoten. Nach dem Erhalt des Element -Objekts müssen Sie zunächst feststellen, ob es sich um leere RootelementsTname handelt ("root"). rootElementsettext ("text"); // dasselbe gilt für die Änderung des Textes im Tag systemoutprintln ("Text nach dem Stammknoten geändert:" + rootElementGetText ()); } catch (Ausnahme e) {eprintstacktrace (); }} public static void main (String [] args) {dom4jParsexmldemo Demo = new Dom4jParsexmldemo (); Demoparsexml01 (); }}Darüber hinaus befindet sich das obige XML unter SRC, Modul01.xml ist wie folgt:
<?
Führen Sie als nächstes die Hauptmethode dieser Klasse aus, und der Konsoleneffekt lautet wie folgt:
Daraus wissen wir:
<1> Es gibt viele Möglichkeiten, XML -Dateien zu lesen.
<2> Es ist sehr einfach, den Text- und Etikettennamen des Elementobjekts herauszunehmen.
<3> Und es ist sehr bequem, die Text- und Beschriftungsnamen von Elementen zu ändern, aber es wird nicht in Datenträger -XML -Dateien geschrieben.
Das obige erhält einfach das Element des Stammverzeichnisses des XML und schaltet dann das Dokument -Dokumentobjekt mit dem Iterator -Iterator durch.
Der spezifische Code lautet wie folgt:
public void parsexml02 () {try {// Die XML unter SRC in den Eingangsstrom inputStream konvertieren = thisGetClass () getResourceAsStream ("/modulexml"); // Erstellen Sie einen Saxreader -Leser speziell zum Lesen von XML Saxreader Saxreader = new Saxreader (); // Gemäß der Read -Rewrite -Methode von Saxreader kann man erkennen, dass es durch den Eingabestream inputStream gelesen oder durch das Dateiobjektdokument = SAXREADERREAD (InputStream) gelesen werden kann. Element rootElement = documentGetRootElement (); Iterator <element> moduleSiterator = rootElementElements ("modul") iterator (); // RootElementElement ("Name"); Holen Sie sich ein bestimmtes untergeordnetes Element // RootElementElements ("Name"); Holen Sie sich den Satz von untergeordneten Elementen -Moudule -Knoten unter den Stammknoten, geben Sie den Listensammlungstyp // RootElementElements ("Modul") Iterator () zurück. Iterieren Sie jedes Element in der zurückgegebenen Listensammlung und geben Sie alle untergeordneten Knoten an eine Iteratorsammlung zurück (moduleSiteratorHasNext ()) {Element moduleElement = moduleSiteratornext (); Element nameElement = moduleElementElement ("Name"); SystemOutprintln (nameElementGetName () + ":" + nameElementGetText ()); Element ValueElement = ModuleElementElement ("Wert"); SystemOutPrintln (valueLementGetName () + ":" + valueLementGetText ()); Element DESCRICTIONELEMENT = ModuleElementElement ("Deskript"); SystemOutPrintln (DescriptElementGetName () + ":" + cribeelementGetText ()); }} catch (Ausnahme e) {ePrintStackTrace (); }} Darüber hinaus befindet sich das obige XML unter SRC, Module02.xml ist wie folgt:
<?
Führen Sie als nächstes die Hauptmethode dieser Klasse aus, und der Konsoleneffekt lautet wie folgt:
Daraus wissen wir:
<1> DOM4J iteriert über XML-Unterelemente sehr effizient und bequem;
Die obigen iteriert jedoch einfach die untergeordneten Knotenelemente von XML, aber wenn die XML -Regeln komplizierter sind, wie z.
<? </modul> <modul> <name> Verwaltungskonfiguration </name> <wert> Keine </value> <descript> Anweisungen zum Verwalten der Konfiguration </deskripts> <modul id = "106"> <name> Systemverwaltung </name> <wert> 0 </value> <descript> Konfiguration </descript> <modul id = " <Descript> Nummer </Deskript> </modul> </modul> </modul> </module>
Da ihre Strukturen unterschiedlich sind, wird ein Fehler gemeldet, wenn sie direkt iterieren, wird ein Fehler gemeldet:
java.lang.nullpointerexception
Sie müssen es also zu diesem Zeitpunkt sorgfältig verwenden. Sie können die Elemente nicht jedes Mal direkt in die Iterierung einsetzen. Der spezifische Implementierungscode lautet wie folgt:
public void parsexml03 () {try {// Die XML unter SRC in den Eingabestream inputStream konvertieren = thisGetClass () getResourceAsStream ("/modulexml"); // Erstellen Sie einen Saxreader -Leser speziell zum Lesen von XML Saxreader Saxreader = new Saxreader (); // Gemäß der Read -Rewrite -Methode von Saxreader kann man erkennen, dass es durch den Eingabestream inputStream gelesen oder durch das Dateiobjektdokument = SAXREADERREAD (InputStream) gelesen werden kann. Element rootElement = documentGetRootElement (); if (RootElementElements ("Modul")! für (Elementelement: ElementList) {if (! elementGetTextTrim () Equals ("")) {SystemOutprintln ("【1】" + elementGetTextTrim ()); } else {Element nameElement = elementElement ("name"); SystemOutprintln ("【2】" + nameElementGetName () + ":" + nameElementGetText ()); Element ValueElement = ElementElement ("Wert"); SystemOutprintln ("【2】" + ValueLementGetName () + ":" + valueLementGetText ()); Element Beschreibung = ElementElement ("Deskript"); SystemOutPrintln ("【2】" + capctionElementGetName () + ":" + BeschreibungLementGetText ()); Liste <Element> subelementlist = elementElements ("Modul"); für (Element Subelement: SubelementList) {if (! subelementGetTextTrim () Equals ("")) {SystemOutprintln ("【3】" + subelementGetTExtTrim ()); } else {Element subnameElement = subelementElement ("name"); SystemOutprintln ("【3】" + SubnameElementGetName () + ":" + subnameElementGetText ()); Element subvalueElement = subelementElement ("Wert"); SystemOutprintln ("【3】" + subvalueElementGetName () + ":" + subvalueElementGetTExt ()); Element subDescriptElement = subelementElement ("Deskript"); SystemOutprintln ("【3】" + SubDescriptElementGetName () + ":" + subDescriptElementGetText ()); }}}}}} catch (Ausnahme e) {eprintstacktrace (); }}Führen Sie als nächstes die Hauptmethode dieser Klasse aus, und der Konsoleneffekt lautet wie folgt:
OK, jetzt können wir das Problem leerer Referenzen in iterativen Dokumenten lösen.
Darüber hinaus kann der Code tatsächlich neu gestaltet werden, da der Betrieb von Kinderelementen in der Schleife sich wiederholt und durch Rekursion verbessert werden kann, aber die Lesbarkeit wird etwas schlechter.
Wenn Sie manchmal alle Textinformationen in XML erhalten müssen oder das von anderen übergebene XML-Format nicht standardisiert ist, z. B. der Name im Tag ist fallempfindlich, obwohl XML nicht fallempfindlich ist, muss es paarweise erscheinen. Um dies zu vermeiden, können Sie einfach alle Tag -Namen für Kapitale ändern. Der spezifische Code lautet wie folgt:
public static void main (string [] args) {string str = "<? xml Version =/" 0/"coding =/" utf-8/"?> <modules id =/" 123/"> <module System </Deskript> </modul> </modules> "; SystemUnTrintln (strreplaceAll ("<[^<]*>", "_")); Muster muster = musterCompile ("<[^<]*>"); Matcher Matcher = mustermatcher (str); while (matcherFind ()) {str = strreplaceAll (MatcherGroup (0), MatcherGroup (0) touppercase ()); } Systemoutprintln (str); }Nach dem Laufen sind die Renderings wie folgt:
2. Generieren Sie XML -Dokument
DOM4J kann XML analysieren, und es wird definitiv XML erzeugen, und es ist einfacher zu bedienen.
Implementierungsideen:
<1> DocumentHelper bietet eine Methode zum Erstellen eines Dokumentobjekts.
<2> Betreiben Sie dieses Dokumentobjekt und fügen Sie den Knoten und den Text, den Namen und die Attributwerte unter dem Knoten hinzu.
<3> Verwenden Sie dann den XMLWriter -Autor, um das eingekapselte Dokumentobjekt auf die Festplatte zu schreiben.
Der spezifische Code lautet wie folgt:
Import Java.io.FileWriter; JavaioioException importieren; Javaiowriter importieren; import orgdom4jdocument; import orgdom4jdocumentHelper; import orgdom4jelement; import orgdom4jioxmlwriter; /** * Verwenden Sie DOM4J, um XML -Dokumente zu generieren // Knoteninformation Element RootElement = documentAdDelement ("Module"); // Dies kann weiterhin untergeordnete Knoten hinzugefügt oder den Inhalts rootElementsettext angeben ("Dies sind die Textinformationen des Modul -Tags"). Element Element = rootElementAddelement ("Modul"); Element nameElement = elementAddelement ("name"); Element ValueElement = ElementAdDelement ("Wert"); Element Beschreibung = elementAddelement ("Beschreibung"); nameElementsettext ("name"); NAMEELEMENTADDATTRIBUTE ("Sprache", "Java"); // Attributwert für Knoten ValueElementsettext ("Wert"); valueElementAddattribute ("Sprache", "C#"); captureLementsettext ("Beschreibung"); captureElementAddattribute ("Sprache", "SQL Server"); SystemOutprintln (documentsXMl ()); // Dokumentobjekt direkt in die String -Ausgabe writer writer teewriter umwandeln // DOM4J stellt ein Objekt bereit, das speziell in die Dateien XMLWriter XMLWriter xmlwriter = new XMLWriter (FileWriter) geschrieben wurde. XMLWriterWrite (Dokument); xmlWriterFlush (); xmlWriterClose (); Systemoutprintln ("XML -Dokument wurde erfolgreich hinzugefügt!"); } catch (ioException e) {eprintstacktrace (); }} public static void main (String [] args) {Dom4JBuildXMldemo Demo = new Dom4jbuildxMldemo (); Demobuild01 (); }} Der Effekt des Ausführens des Codes ist wie folgt:
Gehen Sie dann zum C -Laufwerk unten, um zu überprüfen, ob die Erstellung erfolgreich war. Es stellte sich heraus, dass der Inhalt in der XML -Datei mit der Inhaltsausgabe durch die Konsole übereinstimmt.
Darüber hinaus gibt das obige erzeugte XML das Codierungsformat nicht an, aber UTF-8 wird weiter angezeigt, was darauf hinweist, dass dies das Standard-Codierungsformat ist. Wenn Sie erneut angeben möchten, können Sie document.setXmlencoding ("gbk") hinzufügen. Vor dem Schreiben auf die Festplatte.
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.