Este artículo es bueno ~ instancia las operaciones básicas de JDOM. Sin embargo, debido a que la versión JDOM utilizada por el autor en ese momento todavía era relativamente antigua, ¡algunos códigos se compilarán incorrectamente! ¡Apoyar a los chinos tampoco es bueno! ¡Por lo tanto, Faraón hizo modificaciones al programa basándose en el trabajo del autor original! Se corrigieron errores de compilación y caracteres chinos confusos. Publíquelo para que todos puedan aprenderlo y usarlo.
Entorno de prueba: jdom1.0, weblogic 8.1sp2, tomcat 5.0, IE 6.0
/==================================El texto comienza============== = ===========================/
Java + XML = JDOM!
Este es el objetivo de los diseñadores de JDOM. Si alguna vez ha utilizado los molestos SAX o DOM para procesar XML, sabrá por qué se necesita JDOM o JAXB. En la conferencia JavaOne de este año (2002), Jason Hunter, el principal fundador de JDOM, pronunció un maravilloso discurso introduciendo la tecnología JDOM, titulado JDOM Makes XML Easy.
Obtener e instalar JDOM
La última versión de JDOM se puede descargar en http://jdom.org . Tome la versión binaria de JDOM 1.0 como ejemplo. Después de la descarga, descomprímalo. El archivo jar JDOM es el archivo jdom.jar en el directorio de compilación y agréguelo a la ruta de clase. Además, JDOM también necesita el soporte de archivos jar en el directorio lib, como xerces.jar y jaxp.jar. Si se produce el siguiente error durante el uso:
java.lang.NoSuchMethodError
o
java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException
Debe asegurarse de que el archivo xerces.jar esté ubicado antes que otras clases XML, como JAXP o Crimson, en CLASSPATH. Es posible que estos archivos de clase, incluidas las versiones anteriores de xerces, no admitan SAX2.0 o DOM Nivel 2. Esto resultó en el error anterior.
un ejemplo sencillo
El método de procesamiento de JDOM es algo similar a DOM, pero se implementa principalmente mediante SAX, por lo que no tiene que preocuparse por la velocidad de procesamiento ni los problemas de memoria. Además, casi no hay interfaces en JDOM, todas las clases son clases reales y no hay clases de fábrica de clases.
El siguiente es el archivo XML utilizado para el ejemplo: MyXml.xml
<?xml version="1.0" encoding="utf-8"?>
<Biblioteca>
<libro>
<Título del libro>Introducción a la programación Java</Título del libro>
<Autor>Zhang San</Author>
<Editorial>Editorial electrónica</Editorial>
<Precio>35.0</Precio>
<Fecha de publicación>2002-10-07</Fecha de publicación>
</libro>
<libro>
<Título del libro>Aplicación de XML en Java</Título del libro>
<Autor>Li Si</Author>
<Editorial>Editorial Esperanza</Editorial>
<Precio>92.0</Precio>
<Fecha de publicación>2002-10-07</Fecha de publicación>
</libro>
</biblioteca>
Los siguientes son Beans que operan archivos XML: XmlBean.java
paquete jdom.test
/**;
* Operación de lectura y escritura XML Bean
*/
importar java.io.*;
importar java.util.*;
importar org.jdom.*;
importar org.jdom.output.*;
importar org.jdom.input.*;
importar javax.servlet.*;
importar javax.servlet.http.*;
clase pública XmlBean {
cadena privada nombre del libro, autor, publicación, precio, fecha de publicación
cadena pública getbookname() {
devolver nombre del libro;
}
cadena pública getauthor() {
autor de retorno;
}
cadena pública getpub() {
pub de regreso;
}
cadena pública getprice() {
precio de devolución;
}
cadena pública getpubdate() {
volver fecha de publicación;
}
public void setbookname (nombre del libro de cadena) {
this.bookname = nombre del libro;
}
public void setauthor(Autor de cadena) {
this.autor = autor;
}
setpub público vacío (pub de cadena) {
this.pub = pub;
}
public void setprice(precio de cadena) {
this.price = precio;
}
setpubdate público vacío (fecha de publicación de cadena) {
this.pubdate = fecha de publicación;
}
público XmlBean() {
}
/**
* Leer toda la información del archivo XML
*/
Public Vector LoadXML (ruta de cadena) lanza una excepción {
VectorxmlVector = nulo;
FileInputStream fi = nulo;
intentar {
fi = nuevo FileInputStream(ruta);
Vectorxml = nuevo Vector();
SAXBuilder sb = nuevo SAXBuilder();
Documento doc = sb.build(fi);
Elemento raíz = doc.getRootElement() // Obtener el elemento raíz
Lista de libros = root.getChildren(); // Obtiene la colección de todos los elementos secundarios del elemento raíz.
Libro de elementos = nulo;
XmlBean xml = nulo;
para (int i = 0; i < libros.tamaño(); i++) {
xml = nuevo XmlBean();
libro = (Elemento) libros.get(i); // Obtiene el primer elemento del libro.
xml.setbookname(book.getChild("Nombre del libro").getText());
xml.setauthor(book.getChild("Autor").getText());
xml.setpub(book.getChild("Editorial").getText());
xml.setprice(book.getChild("precio").getText());
xml.setpubdate(book.getChild("Fecha de publicación").getText());
xmlVector.add(xml);
}
} captura (Excepción e) {
System.err.println(e + "error");
} finalmente {
intentar {
fi.cerrar();
} captura (Excepción e) {
e.printStackTrace();
}
}
devolver vectorxml;
}
/**
* Eliminar la información especificada del archivo XML
*/
public static void DelXML (solicitud HttpServletRequest) arroja una excepción {
FileInputStream fi = nulo;
FileOutputStream fo = nulo;
intentar {
request.setCharacterEncoding("GBK");
Ruta de cadena = request.getParameter("ruta");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = nuevo FileInputStream(ruta);
SAXBuilder sb = nuevo SAXBuilder();
Documento doc = sb.build(fi);
Elemento raíz = doc.getRootElement() // Obtener el elemento raíz
Lista de libros = root.getChildren(); // Obtiene la colección de todos los elementos secundarios del elemento raíz.
books.remove(xmlid);//Eliminar el elemento secundario en la posición especificada
// Sangría de cadena = " ";
// booleano newLines = verdadero;
// Salida XMLOutputter = new XMLOutputter(sangría, nuevasLíneas, "GBK");
Formato formato = Format.getPrettyFormat();
formato.setIndent(" ");
formato.setEncoding("utf-8");
Salida XMLOutputter = nueva XMLOutputter(formato);
fo = nuevo FileOutputStream(ruta);
salida.salida(doc, fo);
} captura (Excepción e) {
System.err.println(e + "error");
} finalmente {
intentar {
fi.cerrar();
fo.cerrar();
} captura (Excepción e) {
e.printStackTrace();
}
}
}
/**
* Agregar información de especificación del archivo XML
*/
AddXML vacío estático público (solicitud HttpServletRequest) arroja una excepción {
FileInputStream fi = nulo;
FileOutputStream fo = nulo;
intentar {
request.setCharacterEncoding("GBK");
Ruta de cadena = request.getParameter("ruta");
fi = nuevo FileInputStream(ruta);
SAXBuilder sb = nuevo SAXBuilder();
Documento doc = sb.build(fi);
Elemento raíz = doc.getRootElement() // Obtener el elemento raíz
Lista de libros = root.getChildren(); // Obtiene la colección de todos los elementos secundarios del elemento raíz.
String nombre del libro = request.getParameter("nombre del libro");
Autor de cadena = request.getParameter("autor");
Precio de cadena = request.getParameter("precio");
Cadena pub = request.getParameter("pub");
Cadena de fecha de publicación = request.getParameter("fecha de publicación");
// Texto nuevotexto;
Elemento nuevolibro = nuevo Elemento("libro");
Elemento nuevo nombre = nuevo elemento ("Título del libro");
nuevonombre.setText(nombredellibro);
nuevolibro.addContent(nuevonombre);
Elemento nuevoautor = nuevo Elemento("autor");
nuevoautor.setText(autor);
nuevolibro.addContent(nuevoautor);
Elemento newpub = nuevo Elemento("Editorial");
newpub.setText(pub);
nuevolibro.addContent(nuevopub);
Elemento nuevoprecio = nuevo Elemento("precio");
nuevoprecio.setText(precio);
nuevolibro.addContent(nuevoprecio);
Elemento nueva fecha = nuevo Elemento ("Fecha de publicación");
nueva fecha.setText(pubdate);
nuevolibro.addContent(nuevafecha);
books.add(newbook);//Agregar elementos secundarios
// Sangría de cadena = " ";
// nuevas líneas booleanas = verdadero;
// Salida XMLOutputter = new XMLOutputter(sangría, nuevasLíneas, "GBK");
Formato formato = Format.getPrettyFormat();
formato.setIndent(" ");
formato.setEncoding("utf-8");
Salida XMLOutputter = nueva XMLOutputter(formato);
fo = nuevo FileOutputStream(ruta);
salida.salida(doc, fo);
} captura (Excepción e) {
System.err.println(e + "error");
} finalmente {
intentar {
fi.cerrar();
fo.cerrar();
} captura (Excepción e) {
e.printStackTrace();
}
}
}
/**
* Modificar la información especificada del archivo XML
*/
public static void EditXML (solicitud HttpServletRequest) arroja una excepción {
FileInputStream fi = nulo;
FileOutputStream fo = nulo;
intentar {
request.setCharacterEncoding("GBK");
Ruta de cadena = request.getParameter("ruta");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = nuevo FileInputStream(ruta);
SAXBuilder sb = nuevo SAXBuilder();
Documento doc = sb.build(fi);
Elemento raíz = doc.getRootElement() // Obtener el elemento raíz
Lista de libros = root.getChildren(); // Obtiene la colección de todos los elementos secundarios del elemento raíz.
Libro de elementos = (Elemento) libros.get(xmlid);
String nombre del libro = request.getParameter("nombre del libro");
Autor de cadena = request.getParameter("autor");
Precio de cadena = request.getParameter("precio");
Cadena pub = request.getParameter("pub");
Cadena de fecha de publicación = request.getParameter("fecha de publicación");
// Texto nuevotexto;
Elemento newname = book.getChild("Título del libro");
newname.setText(bookname);//Modifica el nombre del libro a un nuevo título
Elemento nuevoautor = book.getChild("Autor");
nuevoautor.setText(autor);
Elemento newpub = book.getChild("Editorial");
newpub.setText(pub);
Elemento nuevoprecio = book.getChild("precio");
nuevoprecio.setText(precio);
Elemento newdate = book.getChild("Fecha de publicación");
nueva fecha.setText(pubdate);
//books.set(xmlid,book);//Modificar subelementos
// Sangría de cadena = " ";
// booleano newLines = verdadero;
// Salida XMLOutputter = new XMLOutputter(sangría, nuevasLíneas, "GBK");
Formato formato = Format.getPrettyFormat();
formato.setIndent(" ");
formato.setEncoding("utf-8");
Salida XMLOutputter = nueva XMLOutputter(formato);
fo = nuevo FileOutputStream(ruta);
salida.salida(doc, fo);
} captura (Excepción e) {
System.err.println(e + "error");
} finalmente {
intentar {
fi.cerrar();
fo.cerrar();
} captura (Excepción e) {
e.printStackTrace();
}
}
}
}
El siguiente es el archivo jsp para la operación: test.jsp
<%@ página contentType="text/html;charset=GBK"%>
<%@ idioma de página="java" import="java.util.*,jdom.test.*"%>
<html>
<cabeza>
<title>Leer datos de archivos XML</title>
</cabeza>
<cuerpo>
<h3 align="center">Archivo XML de operación JDOM</h3>
<p align="center">Leer todos los datos del archivo XML</p>
<centro>
<table border="1" cellpadding="0" cellspace="1"
style="border-collapse: contraer" ancho="80%" id="AutoNumber1">
<tr>
<td align="center" width="92">Título del libro</td>
<td align="center" width="92">Autor</td>
<td align="center" width="92">Editor</td>
<td align="center" width="92">Precio</td>
<td align="center" width="92">Fecha de publicación</td>
<td align="center" width="94">Operación</td>
</tr>
</tabla>
<%
Ruta de cadena = application.getRealPath("/JDOM/MyXml.xml");
XmlBean xml = nuevo XmlBean();
Vector xmlall = xml.LoadXML(ruta);
para (int i = 0; i < xmlall.size(); i++) {
xml = (XmlBean) xmlall.elementAt(i);
/**out.println("Nombre del libro:"+xml.getbookname()+"<br>");
out.println("Autor:"+xml.getauthor()+"<br>");
out.println("Editorial:"+xml.getpub()+"<br>");
out.println("Precio:"+xml.getprice()+"<br>");
out.println("Fecha de publicación:"+xml.getpubdate()+"<br><br>");
*/
%>
<table border="1" cellpadding="0" cellspace="1"
style="border-collapse: contraer" ancho="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="centro" ancho="94"><a
href="xmlaction.jsp?act=del&id=<%=i%>&path=<%=path%>">Eliminar</a></td>
</tr>
</tabla>
<%}%></centro>
<método formulario="POST" acción="xmlaction.jsp">
<p align="center"><input type="radio" value="add" checked name="act">Agregar información
<input type="radio" value="edit" name="act">Editar número de serie de datos:<select size="1"
nombre="id">
<%for (int i = 0; i < xmlall.size(); i++) {%>
<option value="<%=i%>">Artículo <%=i + 1%></option>
<%}%>
</seleccionar><br>
Título del libro:<input type="text" name="bookname" size="20"><br>
Autor:<tipo de entrada="texto" nombre="autor" tamaño="20"><br>
Editor:<input type="text" name="pub" size="20"><br>
Precio:<input type="text" name="precio" size="20"><br>
Fecha:<input type="text" name="pubdate" size="20"></p>
<tipo de entrada="oculto" nombre="ruta" valor="<%=ruta%>">
<p align="center"><tipo de entrada="enviar" valor="Enviar" nombre="B1"><entrada
type="reset" value="Reset" nombre="B2"></p>
</formulario>
</cuerpo>
</html>
El siguiente es el archivo jsp que maneja el envío del archivo anterior: xmlation.jsp
<%@ página contentType="text/html;charset=GBK"%>
<%@ idioma de página="java" import="jdom.test.*"%>
<%if (request.getParameter("actuar")! = nulo
&& request.getParameter("actuar").equals("agregar")) {
XmlBean.AddXML(solicitud);
out.println("<p align='center'><br><br>Agregado exitosamente<br><br><a href='test.jsp'>Regresar</a>");
} más si (request.getParameter("actuar")! = nulo
&& request.getParameter("act").equals("del")) {
XmlBean.DelXML(solicitud);
out.println("<p align='center'><br><br>Eliminar correctamente<br><br><a href='test.jsp'>Devolver</a>");
} más si (request.getParameter("actuar")! = nulo
&& request.getParameter("actuar").equals("editar")) {
XmlBean.EditXML(solicitud);
out.println("<p align='center'><br><br>Modificación exitosa<br><br><a href='test.jsp'>Devolución</a>");
} demás {
out.print("<p align='center'><br><br>Operación ilegal<br><br><a href='test.jsp'>Retorno</a>");
}
%>
/================================Fin del texto=============== == ========================/
Observación:
1. ¡La parte amarilla del texto del nombre del Faraón en el archivo XmlBean.java es la modificación y la parte morada es el método de escritura del programa original!
2. La codificación predeterminada del archivo MyXml.xml se ha cambiado a codificación = "utf-8" porque siempre es anormal al analizar GBK o GB2312 en weblogic 8. Tomcat está bien y puede ser el xml predeterminado de weblogic. El analizador no es compatible con GBK. Este problema no se ha resuelto. Si algún experto conoce la solución, responda a esta publicación y dímelo ~~ ¡Gracias a todos!