Dieser Artikel ist gut ~ er instanziiert die grundlegenden Operationen von JDOM. Da die vom Autor damals verwendete JDOM-Version jedoch noch relativ alt war, werden einige Codes falsch kompiliert! Chinesisch zu unterstützen ist auch nicht gut! Daher hat Pharao Änderungen am Programm vorgenommen, die auf der Arbeit des ursprünglichen Autors basieren! Kompilierungsfehler und verstümmelte chinesische Schriftzeichen behoben. Veröffentlichen Sie es, damit jeder es lernen und nutzen kann.
Testumgebung: jdom1.0, Weblogic 8.1sp2, Tomcat 5.0, IE 6.0
/================================ Text beginnt============= = ==========================/
Java + XML = JDOM!
Dies ist das Ziel der JDOM-Designer. Wenn Sie jemals das lästige SAX oder DOM zur Verarbeitung von XML verwendet haben, wissen Sie, warum JDOM oder JAXB benötigt wird. Auf der diesjährigen JavaOne-Konferenz (2002) hielt Jason Hunter, der Hauptgründer von JDOM, eine wunderbare Rede mit dem Titel „JDOM Makes XML Easy“, in der er die JDOM-Technologie vorstellte.
Besorgen Sie sich JDOM und installieren Sie es
Die neueste Version von JDOM kann unter http://jdom.org heruntergeladen werden. Nehmen Sie als Beispiel die Binärversion von JDOM 1.0. Entpacken Sie die JDOM-JAR-Datei nach dem Herunterladen im Build-Verzeichnis und fügen Sie sie dem Klassenpfad hinzu. Darüber hinaus benötigt JDOM auch die Unterstützung dieser JAR-Dateien im lib-Verzeichnis wie xerces.jar und jaxp.jar. Wenn während der Nutzung folgender Fehler auftritt:
java.lang.NoSuchMethodError
oder
java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException
Sie müssen sicherstellen, dass sich die Datei xerces.jar vor anderen XML-Klassen wie JAXP oder Crimson im CLASSPATH befindet. Diese Klassendateien, einschließlich früherer älterer Versionen von xerces, unterstützen SAX2.0 oder DOM Level 2 möglicherweise nicht. Dies führte zu dem oben genannten Fehler.
ein einfaches Beispiel
Die Verarbeitungsmethode von JDOM ähnelt in gewisser Weise der von DOM, wird jedoch hauptsächlich mit SAX implementiert, sodass Sie sich keine Gedanken über Verarbeitungsgeschwindigkeit und Speicherprobleme machen müssen. Darüber hinaus gibt es in JDOM fast keine Schnittstellen, alle Klassen sind echte Klassen und es gibt keine Klassenfabrikklassen.
Die folgende XML-Datei wird für das Beispiel verwendet: MyXml.xml
<?xml version="1.0" binding="utf-8"?>
<Bibliothek>
<Buch>
<Buchtitel>Einführung in die Java-Programmierung</Buchtitel>
<Autor>Zhang San</Autor>
<Verlag>Elektronischer Verlag</Verlag>
<Preis>35,0</Preis>
<Veröffentlichungsdatum>2002-10-07</Veröffentlichungsdatum>
</book>
<Buch>
<Buchtitel>Anwendung von XML in Java</Buchtitel>
<Autor>Li Si</Autor>
<Verlag>Hope Publishing House</Verlag>
<Preis>92,0</Preis>
<Veröffentlichungsdatum>2002-10-07</Veröffentlichungsdatum>
</book>
</library>
Die folgenden Beans bedienen XML-Dateien: XmlBean.java
package jdom.test
/**;
* XML-Lese- und Schreiboperation Bean
*/
java.io.* importieren;
import java.util.*;
import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;
import javax.servlet.*;
import javax.servlet.http.*;
öffentliche Klasse XmlBean {
privater String Buchname, Autor, Pub, Preis, Veröffentlichungsdatum;
öffentlicher String getbookname() {
Buchname zurückgeben;
}
public String getauthor() {
Autor zurückgeben;
}
public String getpub() {
Kneipe zurückgeben;
}
public String getprice() {
Rückgabepreis;
}
public String getpubdate() {
return pubdate;
}
public void setbookname(String bookname) {
this.bookname = Buchname;
}
public void setauthor(String author) {
this.author = Autor;
}
public void setpub(String pub) {
this.pub = pub;
}
public void setprice(String-Preis) {
this.price = Preis;
}
public void setpubdate(String pubdate) {
this.pubdate = pubdate;
}
public XmlBean() {
}
/**
* Lesen Sie alle Informationen aus der XML-Datei
*/
public Vector LoadXML(String path) löst eine Ausnahme aus {
Vektor xmlVector = null;
FileInputStream fi = null;
versuchen {
fi = new FileInputStream(path);
xmlVector = new Vector();
SAXBuilder sb = new SAXBuilder();
Dokument doc = sb.build(fi);
Element root = doc.getRootElement(); // Holen Sie sich das Root-Element
List Books = root.getChildren(); // Holen Sie sich die Sammlung aller untergeordneten Elemente des Root-Elements
Elementbuch = null;
XmlBean xml = null;
for (int i = 0; i < Books.size(); i++) {
xml = new XmlBean();
book = (Element) Books.get(i); // Das erste Buchelement abrufen
xml.setbookname(book.getChild("Buchname").getText());
xml.setauthor(book.getChild("Author").getText());
xml.setpub(book.getChild("Verlag").getText());
xml.setprice(book.getChild("price").getText());
xml.setpubdate(book.getChild("Veröffentlichungsdatum").getText());
xmlVector.add(xml);
}
} Catch (Ausnahme e) {
System.err.println(e + "error");
} Endlich {
versuchen {
fi.close();
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
return xmlVector;
}
/**
* Löschen Sie die in der XML-Datei angegebenen Informationen
*/
public static void DelXML(HttpServletRequest request) löst eine Ausnahme aus {
FileInputStream fi = null;
FileOutputStream fo = null;
versuchen {
request.setCharacterEncoding("GBK");
String path = request.getParameter("path");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
Dokument doc = sb.build(fi);
Element root = doc.getRootElement(); // Holen Sie sich das Root-Element
List Books = root.getChildren(); // Holen Sie sich die Sammlung aller untergeordneten Elemente des Root-Elements
Books.remove(xmlid);//Löschen Sie das untergeordnete Element an der angegebenen Position
// String indent = " ";
// boolean newLines = true;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
Format format = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
fo = new FileOutputStream(path);
outp.output(doc, fo);
} Catch (Ausnahme e) {
System.err.println(e + "error");
} Endlich {
versuchen {
fi.close();
fo.close();
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
}
/**
* Informationen zur XML-Dateispezifikation hinzufügen
*/
public static void AddXML(HttpServletRequest request) löst eine Ausnahme aus {
FileInputStream fi = null;
FileOutputStream fo = null;
versuchen {
request.setCharacterEncoding("GBK");
String path = request.getParameter("path");
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
Dokument doc = sb.build(fi);
Element root = doc.getRootElement(); // Holen Sie sich das Root-Element
List Books = root.getChildren(); // Holen Sie sich die Sammlung aller untergeordneten Elemente des Root-Elements
String bookname = request.getParameter("bookname");
String author = request.getParameter("author");
String-Preis = request.getParameter("price");
String pub = request.getParameter("pub");
String pubdate = request.getParameter("pubdate");
// Text newtext;
Element newbook = new Element("book");
Element newname = new Element("Book Title");
neuer Name.setText(Buchname);
newbook.addContent(newname);
Element newauthor = new Element("author");
newauthor.setText(author);
newbook.addContent(newauthor);
Element newpub = new Element("Publishing House");
newpub.setText(pub);
newbook.addContent(newpub);
Element newprice = new Element("price");
newprice.setText(price);
newbook.addContent(newprice);
Element newdate = new Element("Veröffentlichungsdatum");
newdate.setText(pubdate);
newbook.addContent(newdate);
Books.add(newbook);//Untergeordnete Elemente hinzufügen
// String indent = " ";
// boolean newLines = true;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
Format format = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
fo = new FileOutputStream(path);
outp.output(doc, fo);
} Catch (Ausnahme e) {
System.err.println(e + "error");
} Endlich {
versuchen {
fi.close();
fo.close();
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
}
/**
* Ändern Sie die in der XML-Datei angegebenen Informationen
*/
public static void EditXML(HttpServletRequest request) löst eine Ausnahme aus {
FileInputStream fi = null;
FileOutputStream fo = null;
versuchen {
request.setCharacterEncoding("GBK");
String path = request.getParameter("path");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
Dokument doc = sb.build(fi);
Element root = doc.getRootElement(); // Holen Sie sich das Root-Element
List Books = root.getChildren(); // Holen Sie sich die Sammlung aller untergeordneten Elemente des Root-Elements
Element book = (Element) Books.get(xmlid);
String bookname = request.getParameter("bookname");
String author = request.getParameter("author");
String-Preis = request.getParameter("price");
String pub = request.getParameter("pub");
String pubdate = request.getParameter("pubdate");
// Text newtext;
Element newname = book.getChild("Book Title");
newname.setText(bookname);//Ändern Sie den Buchnamen in einen neuen Titel
Element newauthor = book.getChild("Author");
newauthor.setText(author);
Element newpub = book.getChild("Publishing House");
newpub.setText(pub);
Element newprice = book.getChild("price");
newprice.setText(price);
Element newdate = book.getChild("Veröffentlichungsdatum");
newdate.setText(pubdate);
//books.set(xmlid,book);//Unterelemente ändern
// String indent = " ";
// boolean newLines = true;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
Format format = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
fo = new FileOutputStream(path);
outp.output(doc, fo);
} Catch (Ausnahme e) {
System.err.println(e + "error");
} Endlich {
versuchen {
fi.close();
fo.close();
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
}
}
Das Folgende ist die JSP-Datei für den Betrieb: test.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page language="java" import="java.util.*,jdom.test.*"%>
<html>
<Kopf>
<title>XML-Dateidaten lesen</title>
</head>
<Körper>
<h3 align="center">XML-Datei für JDOM-Vorgänge</h3>
<p align="center">Alle Daten in der XML-Datei lesen</p>
<Mitte>
<table border="1" cellpadding="0" cellspacing="1"
style="border-collapse: Collapse" width="80%" id="AutoNumber1">
<tr>
<td align="center" width="92">Buchtitel</td>
<td align="center" width="92">Autor</td>
<td align="center" width="92">Herausgeber</td>
<td align="center" width="92">Preis</td>
<td align="center" width="92">Veröffentlichungsdatum</td>
<td align="center" width="94">Operation</td>
</tr>
</table>
<%
String path = application.getRealPath("/JDOM/MyXml.xml");
XmlBean xml = new XmlBean();
Vektor xmlall = xml.LoadXML(path);
for (int i = 0; i < xmlall.size(); i++) {
xml = (XmlBean) xmlall.elementAt(i);
/**out.println("Buchname:"+xml.getbookname()+"<br>");
out.println("Autor:"+xml.getauthor()+"<br>");
out.println("Publishing House:"+xml.getpub()+"<br>");
out.println("Preis:"+xml.getprice()+"<br>");
out.println("Veröffentlichungsdatum:"+xml.getpubdate()+"<br><br>");
*/
%>
<table border="1" cellpadding="0" cellspacing="1"
style="border-collapse: Collapse" width="80%" id="AutoNumber2">
<tr>
<td align="center" width="92"><%=xml.getbookname()%></td>
<td align="center" width="92"><%=xml.getauthor()%></td>
<td align="center" width="92"><%=xml.getpub()%></td>
<td align="center" width="92"><%=xml.getprice()%></td>
<td align="center" width="92"><%=xml.getpubdate()%></td>
<td align="center" width="94"><a
href="xmlaction.jsp?act=del&id=<%=i%>&path=<%=path%>">Löschen</a></td>
</tr>
</table>
<%}%></center>
<form method="POST" action="xmlaction.jsp">
<p align="center"><input type="radio" value="add" reviewed name="act">Informationen hinzufügen
<input type="radio" value="edit" name="act">Datenseriennummer bearbeiten:<select size="1"
name="id">
<%for (int i = 0; i < xmlall.size(); i++) {%>
<option value="<%=i%>">Artikel <%=i + 1%></option>
<%}%>
</select><br>
Buchtitel:<input type="text" name="bookname" size="20"><br>
Autor:<input type="text" name="author" size="20"><br>
Herausgeber:<input type="text" name="pub" size="20"><br>
Preis:<input type="text" name="price" size="20"><br>
Datum:<input type="text" name="pubdate" size="20"></p>
<input type="hidden" name="path" value="<%=path%>">
<p align="center"><input type="submit" value="Submit" name="B1"><input
type="reset" value="Reset" name="B2"></p>
</form>
</body>
</html>
Das Folgende ist die JSP-Datei, die die Übermittlung der vorherigen Datei übernimmt: xmlation.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page language="java" import="jdom.test.*"%>
<%if (request.getParameter("act") != null
&& request.getParameter("act").equals("add")) {
XmlBean.AddXML(Anfrage);
out.println("<p align='center'><br><br>Erfolgreich hinzugefügt<br><br><a href='test.jsp'>Return</a>");
} else if (request.getParameter("act") != null
&& request.getParameter("act").equals("del")) {
XmlBean.DelXML(Anfrage);
out.println("<p align='center'><br><br>Erfolgreich löschen<br><br><a href='test.jsp'>Return</a>");
} else if (request.getParameter("act") != null
&& request.getParameter("act").equals("edit")) {
XmlBean.EditXML(Anfrage);
out.println("<p align='center'><br><br>Änderung erfolgreich<br><br><a href='test.jsp'>Return</a>");
} anders {
out.print("<p align='center'><br><br>Illegal operation<br><br><a href='test.jsp'>Return</a>");
}
%>
/==============================Ende des Textes============== == =======================/
Bemerkung:
1. Der gelbe Teil des Namenstextes des Pharaos in der Datei XmlBean.java ist die Änderung und der violette Teil ist die Schreibmethode des Originalprogramms!
2. Die Standardkodierung der MyXml.xml-Datei wurde in „encoding="utf-8" geändert, da sie beim Parsen von GBK oder GB2312 unter Weblogic 8 immer abnormal ist. Tomcat ist in Ordnung und es handelt sich möglicherweise um die eigene Standard-XML von Weblogic Der Parser unterstützt GBK nicht. Wenn ein Experte die Lösung kennt, antworten Sie bitte auf diesen Beitrag und teilen Sie mir dies mit. Vielen Dank an alle!