Este artigo é bom - ele instancia as operações básicas do JDOM. No entanto, como a versão do JDOM usada pelo autor naquela época ainda era relativamente antiga, alguns códigos serão compilados incorretamente! Apoiar os chineses também não é bom! Portanto, o Faraó fez modificações no programa com base no trabalho do autor original! Erros de compilação corrigidos e caracteres chineses distorcidos. Publique-o para que todos possam aprender e usar.
Ambiente de teste: jdom1.0, weblogic 8.1sp2, tomcat 5.0, IE 6.0
/=================================O texto começa============= ===========================/
Java + XML = JDOM!
Este é o objetivo dos designers JDOM. Se você já usou o irritante SAX ou DOM para processar XML, saberá por que o JDOM ou o JAXB são necessários. Na conferência JavaOne deste ano (2002), Jason Hunter, o principal fundador do JDOM, fez um discurso maravilhoso apresentando a tecnologia JDOM, intitulado JDOM Makes XML Easy.
Obtenha e instale o JDOM
A versão mais recente do JDOM pode ser baixada em http://jdom.org . Pegue a versão binária do JDOM 1.0 como exemplo. Após o download, descompacte-o. O arquivo JDOM jar é o arquivo jdom.jar no diretório de construção e adicione-o ao caminho da classe. Além disso, o JDOM também precisa do suporte dos arquivos jar no diretório lib, como xerces.jar e jaxp.jar. Se ocorrer o seguinte erro durante o uso:
java.lang.NoSuchMethodError
ou
java.lang.NoClassDefFoundError:org/xml/sax/SAXNotRecognizedException
Você precisa garantir que o arquivo xerces.jar esteja localizado antes de outras classes XML, como JAXP ou Crimson, no CLASSPATH. Esses arquivos de classe, incluindo versões anteriores de xerces, podem não suportar SAX2.0 ou DOM Nível 2. Isso resultou no erro acima.
um exemplo simples
O método de processamento do JDOM é um pouco semelhante ao DOM, mas é implementado principalmente usando SAX, então você não precisa se preocupar com velocidade de processamento e problemas de memória. Além disso, quase não há interfaces no JDOM, todas as classes são classes reais e não existem classes de fábrica de classes.
A seguir está o arquivo XML usado para o exemplo: MyXml.xml
<?xml version="1.0" encoding="utf-8"?>
<Biblioteca>
<livro>
<Título do livro>Introdução à programação Java</Título do livro>
<Autor>Zhang San</Autor>
<Editora>Editora Eletrônica</Editora>
<Preço>35,0</Preço>
<Data de publicação>07/10/2002</Data de publicação>
</livro>
<livro>
<Título do livro>Aplicação de XML em Java</Título do livro>
<Autor>Li Si</Autor>
<Editora>Editora Esperança</Editora>
<Preço>92,0</Preço>
<Data de publicação>07/10/2002</Data de publicação>
</livro>
</biblioteca>
A seguir estão Beans que operam arquivos XML: XmlBean.java
package
jdom.test;
* Operação de leitura e gravação 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.*;
classe pública XmlBean {
private String nome do livro, autor, pub, preço, data de publicação;
public String getbookname() {
retornar nome do livro;
}
public String getautor() {
retornar autor;
}
public String getpub() {
pub de retorno;
}
public String getpreço() {
preço de retorno;
}
public String getpubdate() {
retornar publicação;
}
public void nome_do_livro(String nome_do_livro) {
this.bookname = nome do livro;
}
public void setauthor(String autor) {
este.autor = autor;
}
public void setpub(String pub) {
isto.pub = pub;
}
public void setprice(String preço) {
este.preço = preço;
}
public void setpubdate(String pubdate) {
isto.pubdate = pubdate;
}
publicXmlBean(){
}
/**
* Leia todas as informações do arquivo XML
*/
vetor público LoadXML (caminho da string) lança exceção {
Vetor xmlVetor = null;
FileInputStream fi = null;
tentar {
fi = novo FileInputStream(caminho);
xmlVetor = novo Vetor();
SAXBuilder sb = new SAXBuilder();
Documento doc = sb.build(fi);
Elemento root = doc.getRootElement();
List books = root.getChildren(); // Obtém a coleção de todos os elementos filhos do elemento raiz
Elemento livro = null;
XmlBean xml = null;
for (int i = 0; i <books.size(); i++) {
xml = novoXmlBean();
book = (Element) books.get(i); // Obtém o primeiro elemento do livro
xml.setbookname(book.getChild("Nome do livro").getText());
xml.setauthor(book.getChild("Autor").getText());
xml.setpub(book.getChild("Editora").getText());
xml.setprice(book.getChild("preço").getText());
xml.setpubdate(book.getChild("Data de Publicação").getText());
xmlVetor.add(xml);
}
} catch (Exceção e) {
System.err.println(e + "erro");
} finalmente {
tentar {
fi.close();
} catch (Exceção e) {
e.printStackTrace();
}
}
retornar xmlVetor;
}
/**
* Excluir informações especificadas do arquivo XML
*/
public static void DelXML (solicitação HttpServletRequest) lança exceção {
FileInputStream fi = null;
FileOutputStream fo = null;
tentar {
request.setCharacterEncoding("GBK");
String caminho = request.getParameter("caminho");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = novo FileInputStream(caminho);
SAXBuilder sb = new SAXBuilder();
Documento doc = sb.build(fi);
Elemento root = doc.getRootElement();
List books = root.getChildren(); // Obtém a coleção de todos os elementos filhos do elemento raiz
books.remove(xmlid);//Exclui o elemento filho na posição especificada
// String recuo = " ";
// boolean newLines = true;
// saída XMLOutputter = new XMLOutputter(indent, newLines, "GBK");
Formato formato = Format.getPrettyFormat();
formato.setIndent(" ");
format.setEncoding("utf-8");
Saída XMLOutputter = novo XMLOutputter(formato);
fo = novo FileOutputStream(caminho);
saída.output(doc, fo);
} catch (Exceção e) {
System.err.println(e + "erro");
} finalmente {
tentar {
fi.close();
fo.fechar();
} catch (Exceção e) {
e.printStackTrace();
}
}
}
/**
* Adicione informações de especificação de arquivo XML
*/
public static void AddXML (solicitação HttpServletRequest) lança exceção {
FileInputStream fi = null;
FileOutputStream fo = null;
tentar {
request.setCharacterEncoding("GBK");
String caminho = request.getParameter("caminho");
fi = novo FileInputStream(caminho);
SAXBuilder sb = new SAXBuilder();
Documento doc = sb.build(fi);
Elemento root = doc.getRootElement();
List books = root.getChildren(); // Obtém a coleção de todos os elementos filhos do elemento raiz
String nomedolivro = request.getParameter("nomedolivro");
String autor = request.getParameter("autor");
String preço = request.getParameter("preço");
String pub = request.getParameter("pub");
String pubdate = request.getParameter("pubdate");
// Texto novotexto;
Elemento novo livro = novo Elemento("livro");
Elemento novonome = novo Elemento("Título do Livro");
novonome.setText(nomedolivro);
novolivro.addContent(novonome);
Elemento novoautor = novo Elemento("autor");
novoautor.setText(autor);
novolivro.addContent(novoautor);
Elemento newpub = new Element("Editora");
newpub.setText(pub);
novolivro.addContent(newpub);
Elemento novopreço = novo Elemento("preço");
novopreço.setText(preço);
novolivro.addContent(novopreço);
Elemento novadata = novo Elemento("Data de publicação");
novadata.setText(pubdate);
novolivro.addContent(novadata);
books.add(newbook);//Adiciona elementos filhos
// String recuo = " ";
// boolean newLines = true;
// saída XMLOutputter = new XMLOutputter(indent, newLines, "GBK");
Formato formato = Format.getPrettyFormat();
formato.setIndent(" ");
format.setEncoding("utf-8");
Saída XMLOutputter = novo XMLOutputter(formato);
fo = novo FileOutputStream(caminho);
saída.output(doc, fo);
} catch (Exceção e) {
System.err.println(e + "erro");
} finalmente {
tentar {
fi.close();
fo.fechar();
} catch (Exceção e) {
e.printStackTrace();
}
}
}
/**
* Modifique as informações especificadas do arquivo XML
*/
public static void EditXML (solicitação HttpServletRequest) lança exceção {
FileInputStream fi = null;
FileOutputStream fo = null;
tentar {
request.setCharacterEncoding("GBK");
String caminho = request.getParameter("caminho");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = novo FileInputStream(caminho);
SAXBuilder sb = new SAXBuilder();
Documento doc = sb.build(fi);
Elemento root = doc.getRootElement();
List books = root.getChildren(); // Obtém a coleção de todos os elementos filhos do elemento raiz
Elemento livro = (Elemento) books.get(xmlid);
String nomedolivro = request.getParameter("nomedolivro");
String autor = request.getParameter("autor");
String preço = request.getParameter("preço");
String pub = request.getParameter("pub");
String pubdate = request.getParameter("pubdate");
// Texto novotexto;
Elemento novonome = book.getChild("Título do livro");
newname.setText(bookname); //Modifica o nome do livro para um novo título
Elemento novoautor = book.getChild("Autor");
novoautor.setText(autor);
Elemento newpub = book.getChild("Editora");
newpub.setText(pub);
Elemento novopreço = book.getChild("preço");
novopreço.setText(preço);
Elemento newdate = book.getChild("Data de Publicação");
novadata.setText(pubdate);
//books.set(xmlid,book);//Modifica subelementos
// String recuo = " ";
// boolean newLines = true;
// saída XMLOutputter = new XMLOutputter(indent, newLines, "GBK");
Formato formato = Format.getPrettyFormat();
formato.setIndent(" ");
format.setEncoding("utf-8");
Saída XMLOutputter = novo XMLOutputter(formato);
fo = novo FileOutputStream(caminho);
saída.output(doc, fo);
} catch (Exceção e) {
System.err.println(e + "erro");
} finalmente {
tentar {
fi.close();
fo.fechar();
} catch (Exceção e) {
e.printStackTrace();
}
}
}
}
A seguir está o arquivo jsp para operação: test.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page idioma="java" import="java.util.*,jdom.test.*"%>
<html>
<cabeça>
<title>Ler dados do arquivo XML</title>
</head>
<corpo>
<h3 align="center">Arquivo XML de operação JDOM</h3>
<p align="center">Leia todos os dados no arquivo XML</p>
<centro>
<table border="1" cellpadding="0" cellpacing="1"
style="border-collapse: colapso" largura="80%" id="AutoNumber1">
<tr>
<td align="center" width="92">Título do livro</td>
<td align="center" width="92">Autor</td>
<td align="center" width="92">Editor</td>
<td align="center" width="92">Preço</td>
<td align="center" width="92">Data de publicação</td>
<td align="center" width="94">Operação</td>
</tr>
</tabela>
<%
Caminho da string = application.getRealPath("/JDOM/MyXml.xml");
XmlBean xml = new XmlBean();
Vetor xmlall = xml.LoadXML(caminho);
for (int i = 0; i < xmlall.size(); i++) {
xml = (XmlBean) xmlall.elementAt(i);
/**out.println("Nome do livro:"+xml.getbookname()+"<br>");
out.println("Autor:"+xml.getauthor()+"<br>");
out.println("Editora:"+xml.getpub()+"<br>");
out.println("Preço:"+xml.getprice()+"<br>");
out.println("Data de publicação:"+xml.getpubdate()+"<br><br>");
*/
%>
<table border="1" cellpadding="0" cellpacing="1"
style="border-collapse: colapso" 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%>">Excluir</a></td>
</tr>
</tabela>
<%}%></center>
<form método="POST" action="xmlaction.jsp">
<p align="center"><input type="radio" value="add"checked name="act">Adicionar informações
<input type="radio" value="edit" name="act">Editar número de série dos dados:<select size="1"
nome="id">
<%for (int i = 0; i < xmlall.size(); i++) {%>
<option value="<%=i%>">Artigo <%=i + 1%></option>
<%}%>
</select><br>
Título do livro:<input type="text" name="bookname" size="20"><br>
Autor:<input type="text" name="author" size="20"><br>
Editor:<input type="text" name="pub" size="20"><br>
Preço:<input type="text" name="price" size="20"><br>
Data:<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>
A seguir está o arquivo jsp que trata do envio do arquivo anterior: xmlation.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@ page idioma="java" import="jdom.test.*"%>
<%if (request.getParameter("act") != nulo
&& request.getParameter("act").equals("add")) {
XmlBean.AddXML(solicitação);
out.println("<p align='center'><br><br>Adicionado com sucesso<br><br><a href='test.jsp'>Return</a>");
} else if (request.getParameter("act") != null
&& request.getParameter("act").equals("del")) {
XmlBean.DelXML(solicitação);
out.println("<p align='center'><br><br>Excluir com sucesso<br><br><a href='test.jsp'>Retornar</a>");
} else if (request.getParameter("act") != null
&& request.getParameter("act").equals("editar")) {
XmlBean.EditXML(solicitação);
out.println("<p align='center'><br><br>Modificação bem-sucedida<br><br><a href='test.jsp'>Retorno</a>");
} outro {
out.print("<p align='center'><br><br>Operação ilegal<br><br><a href='test.jsp'>Retorno</a>");
}
%>
/===============================Fim do texto============== == ========================/
Observação:
1. A parte amarela do texto do nome do Faraó no arquivo XmlBean.java é a modificação, e a parte roxa é o método de escrita do programa original!
2. A codificação padrão do arquivo MyXml.xml foi alterada para encoding="utf-8" porque é sempre anormal ao analisar GBK ou GB2312 no weblogic 8. Tomcat está bem e pode ser o xml padrão do próprio weblogic. o analisador não suporta GBK. Este problema não foi resolvido. Se algum especialista souber a solução, responda a esta postagem e me diga ~~ Obrigado a todos!