Cet article est bon ~ il instancie les opérations de base de JDOM. Cependant, comme la version de JDOM utilisée par l'auteur à cette époque était encore relativement ancienne, certains codes seront mal compilés ! Soutenir le chinois, ce n’est pas bien non plus ! Par conséquent, Pharaon a apporté des modifications au programme en se basant sur le travail de l'auteur original ! Correction d'erreurs de compilation et de caractères chinois tronqués. Publiez-le pour que tout le monde puisse l’apprendre et l’utiliser.
Environnement de test : jdom1.0, weblogic 8.1sp2, tomcat 5.0, IE 6.0
/==================================Le texte commence============= = ==========================/
Java + XML = JDOM !
C'est l'objectif des concepteurs JDOM. Si vous avez déjà utilisé les ennuyeux SAX ou DOM pour traiter du XML, vous saurez pourquoi JDOM ou JAXB sont nécessaires. Lors de la conférence JavaOne de cette année (2002), Jason Hunter, le principal fondateur de JDOM, a prononcé un merveilleux discours présentant la technologie JDOM, intitulé JDOM Makes XML Easy.
Obtenir et installer JDOM
La dernière version de JDOM peut être téléchargée sur http://jdom.org . Prenons l'exemple de la version binaire de JDOM 1.0. Après le téléchargement, décompressez-le. Le fichier jar JDOM est le fichier jdom.jar dans le répertoire de construction et ajoutez-le au chemin de classe. De plus, JDOM a également besoin de la prise en charge de ces fichiers jar dans le répertoire lib tels que xerces.jar et jaxp.jar. Si l'erreur suivante se produit pendant l'utilisation :
java.lang.NoSuchMethodError
ou
java.lang.NoClassDefFoundError : org/xml/sax/SAXNotRecognizedException
Vous devez vous assurer que le fichier xerces.jar se trouve avant les autres classes XML, telles que JAXP ou Crimson, dans CLASSPATH. Ces fichiers de classe, y compris les anciennes versions précédentes de xerces, peuvent ne pas prendre en charge SAX2.0 ou DOM niveau 2. Cela a entraîné l'erreur ci-dessus.
un exemple simple
La méthode de traitement de JDOM est quelque peu similaire à celle de DOM, mais elle est principalement implémentée à l'aide de SAX, vous n'avez donc pas à vous soucier de la vitesse de traitement et des problèmes de mémoire. De plus, il n'y a presque pas d'interfaces dans JDOM, toutes les classes sont de vraies classes et il n'y a pas de classes d'usine de classes.
Voici le fichier XML utilisé pour l'exemple : MyXml.xml
<?xml version="1.0" encoding="utf-8"?>
<Bibliothèque>
<livre>
<Titre du livre>Introduction à la programmation Java</Titre du livre>
<Auteur>Zhang San</Auteur>
<Maison d'édition>Maison d'édition électronique</Maison d'édition>
<Prix>35,0</Prix>
<Date de publication>2002-10-07</Date de publication>
</livre>
<livre>
<Titre du livre>Application de XML en Java</Titre du livre>
<Auteur>Li Si</Auteur>
<Maison d'édition>Maison d'édition Hope</Maison d'édition>
<Prix>92,0</Prix>
<Date de publication>2002-10-07</Date de publication>
</livre>
</bibliothèque>
Les Beans suivants exploitent des fichiers XML : XmlBean.java
package jdom.test
/**;
* Opération de lecture et d'écriture XML Bean
*/
importer java.io.* ;
importer java.util.* ;
importer org.jdom.* ;
importer org.jdom.output.* ;
importer org.jdom.input.* ;
importer javax.servlet.* ;
importer javax.servlet.http.* ;
classe publique XmlBean {
private String nom du livre, auteur, pub, prix, date de publication ;
public String getbookname() {
renvoyer le nom du livre ;
}
chaîne publique getauthor() {
renvoyer l'auteur ;
}
chaîne publique getpub() {
retour au pub;
}
chaîne publique getprice() {
prix de retour ;
}
chaîne publique getpubdate() {
retourner la publication ;
}
public void setbookname (String nom du livre) {
this.bookname = nom du livre ;
}
public void setauthor(String auteur) {
this.author = auteur ;
}
public void setpub (String pub) {
this.pub = pub;
}
public void setprice (Prix de la chaîne) {
this.price = prix ;
}
public void setpubdate(String pubdate) {
this.pubdate = publication;
}
public XmlBean() {
}
/**
* Lire toutes les informations du fichier XML
*/
public Vector LoadXML (String path) lève une exception {
Vecteur xmlVector = nul ;
FileInputStream fi = null ;
essayer {
fi = nouveau FileInputStream(chemin);
xmlVector = nouveau vecteur ();
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root = doc.getRootElement(); // Récupère l'élément racine
List books = root.getChildren(); // Récupère la collection de tous les éléments enfants de l'élément racine
Élément livre = null ;
XmlBean xml = nul ;
pour (int i = 0; i < books.size(); i++) {
xml = nouveau XmlBean();
book = (Element) books.get(i); // Récupère le premier élément du livre
xml.setbookname(book.getChild("Nom du livre").getText());
xml.setauthor(book.getChild("Auteur").getText());
xml.setpub(book.getChild("Maison d'édition").getText());
xml.setprice(book.getChild("price").getText());
xml.setpubdate(book.getChild("Date de publication").getText());
xmlVector.add(xml);
}
} attraper (Exception e) {
System.err.println(e + "erreur");
} enfin {
essayer {
fi.close();
} attraper (Exception e) {
e.printStackTrace();
}
}
retourner xmlVector ;
}
/**
* Supprimer les informations spécifiées dans le fichier XML
*/
public static void DelXML (requête HttpServletRequest) lève une exception {
FileInputStream fi = null ;
FileOutputStream fo = null ;
essayer {
request.setCharacterEncoding("GBK");
Chemin de chaîne = request.getParameter("chemin");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = nouveau FileInputStream(chemin);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root = doc.getRootElement(); // Récupère l'élément racine
List books = root.getChildren(); // Récupère la collection de tous les éléments enfants de l'élément racine
books.remove(xmlid);//Supprimer l'élément enfant à la position spécifiée
// Retrait de chaîne = " " ;
// booléen newLines = true ;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
Format format = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = nouveau XMLOutputter(format);
fo = nouveau FileOutputStream(chemin);
outp.output(doc, fo);
} attraper (Exception e) {
System.err.println(e + "erreur");
} enfin {
essayer {
fi.close();
fo.close();
} attraper (Exception e) {
e.printStackTrace();
}
}
}
/**
* Ajouter des informations de spécification de fichier XML
*/
public static void AddXML (requête HttpServletRequest) lève une exception {
FileInputStream fi = null ;
FileOutputStream fo = null ;
essayer {
request.setCharacterEncoding("GBK");
Chemin de chaîne = request.getParameter("chemin");
fi = nouveau FileInputStream(chemin);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root = doc.getRootElement(); // Récupère l'élément racine
List books = root.getChildren(); // Récupère la collection de tous les éléments enfants de l'élément racine
String nom du livre = request.getParameter("nom du livre");
String author = request.getParameter("author");
Chaîne prix = request.getParameter("prix");
Chaîne pub = request.getParameter("pub");
Chaîne pubdate = request.getParameter("pubdate");
// Texte nouveautexte ;
Élément newbook = new Element("livre");
Élément newname = new Element("Titre du livre");
newname.setText(nom du livre);
newbook.addContent(nouveau nom);
Élément newauthor = new Element("auteur");
newauthor.setText(auteur);
newbook.addContent(nouvelauteur);
Élément newpub = new Element("Maison d'édition");
newpub.setText(pub);
newbook.addContent(newpub);
Élément newprice = new Element("prix");
newprice.setText(prix);
newbook.addContent(nouveauprix);
Élément newdate = new Element("Date de publication");
newdate.setText(pubdate);
newbook.addContent(newdate);
books.add(newbook);//Ajouter des éléments enfants
// Retrait de chaîne = " " ;
// booléen newLines = true ;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
Format format = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = nouveau XMLOutputter(format);
fo = nouveau FileOutputStream(chemin);
outp.output(doc, fo);
} attraper (Exception e) {
System.err.println(e + "erreur");
} enfin {
essayer {
fi.close();
fo.close();
} attraper (Exception e) {
e.printStackTrace();
}
}
}
/**
* Modifier les informations spécifiées dans le fichier XML
*/
public static void EditXML (demande HttpServletRequest) lève une exception {
FileInputStream fi = null ;
FileOutputStream fo = null ;
essayer {
request.setCharacterEncoding("GBK");
Chemin de chaîne = request.getParameter("chemin");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = nouveau FileInputStream(chemin);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root = doc.getRootElement(); // Récupère l'élément racine
List books = root.getChildren(); // Récupère la collection de tous les éléments enfants de l'élément racine
Élément livre = (Élément) livres.get(xmlid);
String nom du livre = request.getParameter("nom du livre");
String author = request.getParameter("author");
Chaîne prix = request.getParameter("prix");
Chaîne pub = request.getParameter("pub");
Chaîne pubdate = request.getParameter("pubdate");
// Texte nouveautexte ;
Élément newname = book.getChild("Titre du livre");
newname.setText(bookname);//Modifier le nom du livre en un nouveau titre
Élément newauthor = book.getChild("Auteur");
newauthor.setText(auteur);
Élément newpub = book.getChild("Maison d'édition");
newpub.setText(pub);
Élément newprice = book.getChild("price");
newprice.setText(prix);
Élément newdate = book.getChild("Date de publication");
newdate.setText(pubdate);
//books.set(xmlid,book);//Modifier les sous-éléments
// Retrait de chaîne = " " ;
// booléen newLines = true ;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
Format format = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = nouveau XMLOutputter(format);
fo = nouveau FileOutputStream(chemin);
outp.output(doc, fo);
} attraper (Exception e) {
System.err.println(e + "erreur");
} enfin {
essayer {
fi.close();
fo.close();
} attraper (Exception e) {
e.printStackTrace();
}
}
}
}
Voici le fichier jsp à utiliser : test.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page language="java" import="java.util.*,jdom.test.*"%>
<html>
<tête>
<title>Lire les données du fichier XML</title>
</tête>
<corps>
<h3 align="center">Fichier XML d'opération JDOM</h3>
<p align="center">Lire toutes les données du fichier XML</p>
<centre>
<table border="1" cellpadding="0" cellpacing="1"
style="border-collapse : réduire" width="80%" id="AutoNumber1">
<tr>
<td align="center" width="92">Titre du livre</td>
<td align="center" width="92">Auteur</td>
<td align="center" width="92">Éditeur</td>
<td align="center" width="92">Prix</td>
<td align="center" width="92">Date de publication</td>
<td align="center" width="94">Opération</td>
</tr>
</table>
<%
Chemin de chaîne = application.getRealPath("/JDOM/MyXml.xml");
XmlBean xml = new XmlBean();
Vecteur xmlall = xml.LoadXML(chemin);
pour (int i = 0; i < xmlall.size(); i++) {
xml = (XmlBean) xmlall.elementAt(i);
/**out.println("Nom du livre :"+xml.getbookname()+"<br>");
out.println("Auteur:"+xml.getauthor()+"<br>");
out.println("Maison d'édition:"+xml.getpub()+"<br>");
out.println("Prix:"+xml.getprice()+"<br>");
out.println("Date de publication :"+xml.getpubdate()+"<br><br>");
*/
%>
<table border="1" cellpadding="0" cellpacing="1"
style="border-collapse : réduire" 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%>">Supprimer</a></td>
</tr>
</table>
<%}%></centre>
<form method="POST" action="xmlaction.jsp">
<p align="center"><input type="radio" value="add" vérifié name="act">Ajouter des informations
<input type="radio" value="edit" name="act">Modifier le numéro de série des données :<select size="1"
nom="id">
<%for (int i = 0; i < xmlall.size(); i++) {%>
<option value="<%=i%>">Article <%=i + 1%></option>
<%}%>
</select><br>
Titre du livre :<input type="text" name="bookname" size="20"><br>
Auteur :<input type="text" name="author" size="20"><br>
Éditeur :<input type="text" name="pub" size="20"><br>
Prix :<input type="text" name="price" size="20"><br>
Date :<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" nom="B2"></p>
</form>
</corps>
</html>
Voici le fichier jsp qui gère la soumission du fichier précédent : 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(demande);
out.println("<p align='center'><br><br>Ajouté avec succès<br><br><a href='test.jsp'>Retour</a>");
} sinon if (request.getParameter("act") != null
&& request.getParameter("act").equals("del")) {
XmlBean.DelXML(demande);
out.println("<p align='center'><br><br>Supprimer avec succès<br><br><a href='test.jsp'>Retour</a>");
} sinon if (request.getParameter("act") != null
&& request.getParameter("act").equals("edit")) {
XmlBean.EditXML(demande);
out.println("<p align='center'><br><br>Modification réussie<br><br><a href='test.jsp'>Retour</a>");
} autre {
out.print("<p align='center'><br><br>Opération illégale<br><br><a href='test.jsp'>Retour</a>");
}
%>
/================================Fin du texte============== == ========================/
Remarque:
1. La partie jaune du texte du nom du Pharaon dans le fichier XmlBean.java est la modification, et la partie violette est la méthode d'écriture du programme original !
2. L'encodage par défaut du fichier MyXml.xml a été modifié en encoding="utf-8" car il est toujours anormal lors de l'analyse de GBK ou GB2312 sous weblogic 8. Tomcat convient, et il peut s'agir du code XML par défaut de weblogic. l'analyseur ne prend pas en charge GBK. Ce problème n'a pas été résolu. Si un expert connaît la solution, veuillez répondre à ce message et dites-le-moi ~~ Merci à tous !