이 기사는 좋습니다. JDOM의 기본 작업을 인스턴스화합니다. 그러나 당시 작성자가 사용했던 JDOM 버전은 아직 비교적 오래되었기 때문에 일부 코드가 잘못 컴파일될 것입니다! 중국어를 지원하는 것도 좋지 않습니다! 그래서 파라오는 원작자의 작업을 바탕으로 프로그램을 수정했습니다! 컴파일 오류 및 잘못된 한자를 수정했습니다. 모든 사람이 배우고 사용할 수 있도록 게시하세요.
테스트 환경: jdom1.0, weblogic 8.1sp2, tomcat 5.0, IE 6.0
/==================================텍스트 시작============= = ==========================/
자바 + XML = JDOM!
이것이 JDOM 디자이너의 목표입니다. XML을 처리하기 위해 성가신 SAX나 DOM을 사용해 본 적이 있다면 JDOM이나 JAXB가 필요한 이유를 알게 될 것입니다. 올해(2002년) JavaOne 컨퍼런스에서 JDOM의 주요 창립자인 Jason Hunter는 JDOM Makes XML Easy라는 제목으로 JDOM 기술을 소개하는 멋진 연설을 했습니다.
JDOM 획득 및 설치
JDOM의 최신 버전은 http://jdom.org 에서 다운로드할 수 있습니다. JDOM 1.0의 바이너리 버전을 예로 들어보겠습니다. 다운로드 후 압축을 풀고 JDOM jar 파일은 빌드 디렉터리에 있는 jdom.jar 파일을 클래스 경로에 추가합니다. 또한 JDOM은 xerces.jar 및 jaxp.jar과 같은 lib 디렉토리의 jar 파일 지원도 필요합니다. 사용 중 다음과 같은 오류가 발생하는 경우:
java.lang.NoSuchMethodError
또는
java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException
xerces.jar 파일이 CLASSPATH에서 JAXP 또는 Crimson과 같은 다른 XML 클래스 앞에 있는지 확인해야 합니다. 이전 xerces 버전을 포함하여 이러한 클래스 파일은 SAX2.0 또는 DOM 레벨 2를 지원하지 않을 수 있습니다. 이로 인해 위와 같은 오류가 발생했습니다.
간단한 예
JDOM의 처리 방법은 DOM과 다소 유사하지만 주로 SAX를 사용하여 구현되므로 처리 속도 및 메모리 문제에 대해 걱정할 필요가 없습니다. 게다가 JDOM에는 인터페이스가 거의 없고, 모든 클래스가 실제 클래스이며, 클래스 팩토리 클래스도 없습니다.
다음은 예제에 사용된 XML 파일입니다. MyXml.xml
<?xml version="1.0" 인코딩="utf-8"?>
<도서관>
<책>
<책 제목>Java 프로그래밍 입문</책 제목>
<저자>장산</저자>
<출판사>전자출판사</출판사>
<가격>35.0</가격>
<게시일>2002-10-07</게시일>
</book>
<책>
<책 제목>Java에서 XML의 응용</책 제목>
<저자>리시</저자>
<출판사>희망출판사</출판사>
<가격>92.0</가격>
<게시일>2002-10-07</게시일>
</book>
</라이브러리>
다음은 XML 파일을 운영하는 Bean입니다. XmlBean.java
package jdom.test
/**
* XML 읽기 및 쓰기 작업 Bean
*/
import java.io.*;
import java.util.*;
org.jdom.* 가져오기;
import org.jdom.output.*;
import org.jdom.input.*;
import javax.servlet.*;
import javax.servlet.http.*
공개 클래스 XmlBean {
private String 책 이름, 저자, 출판사, 가격, 출판 날짜
public String getbookname() {
도서명 반환;
}
공개 문자열 getauthor() {
작성자 반환;
}
공개 문자열 getpub() {
술집 반환;
}
공개 문자열 getprice() {
반품 가격;
}
공개 문자열 getpubdate() {
게시 날짜 반환;
}
public void setbookname(String bookname) {
this.bookname = 책이름;
}
public void setauthor(문자열 작성자) {
this.author = 저자;
}
공개 무효 setpub(문자열 pub) {
this.pub = 펍;
}
public void setprice(문자열 가격) {
this.price = 가격;
}
공개 무효 setpubdate(String pubdate) {
this.pubdate = 출판일;
}
공개 XmlBean() {
}
/**
* XML 파일에서 모든 정보를 읽습니다.
*/
공용 벡터 LoadXML(문자열 경로)에서 예외가 발생합니다.
벡터 xmlVector = null;
FileInputStream fi = null;
노력하다 {
fi = new FileInputStream(경로);
xmlVector = 새로운 벡터();
SAXBuilder sb = new SAXBuilder();
문서 문서 = sb.build(fi);
Element root = doc.getRootElement(); // 루트 요소를 가져옵니다.
List books = root.getChildren(); // 루트 요소의 모든 하위 요소 컬렉션을 가져옵니다.
요소 책 = null;
XmlBean xml = null;
for (int i = 0; i < books.size(); i++) {
xml = 새로운 XmlBean();
book = (Element) books.get(i) // 첫 번째 책 요소를 가져옵니다.
xml.setbookname(book.getChild("책 이름").getText());
xml.setauthor(book.getChild("저자").getText());
xml.setpub(book.getChild("출판사").getText());
xml.setprice(book.getChild("가격").getText());
xml.setpubdate(book.getChild("출판 날짜").getText());
xmlVector.add(xml);
}
} 잡기(예외 e) {
System.err.println(e + "오류");
} 마지막으로 {
노력하다 {
fi.close();
} 잡기(예외 e) {
e.printStackTrace();
}
}
xmlVector를 반환합니다.
}
/**
* XML 파일에 지정된 정보 삭제
*/
public static void DelXML(HttpServletRequest 요청)이 예외를 발생시킵니다.
FileInputStream fi = null;
FileOutputStream fo = null;
노력하다 {
request.setCharacterEncoding("GBK");
문자열 경로 = request.getParameter("path");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = new FileInputStream(경로);
SAXBuilder sb = new SAXBuilder();
문서 문서 = sb.build(fi);
Element root = doc.getRootElement(); // 루트 요소를 가져옵니다.
List books = root.getChildren(); // 루트 요소의 모든 하위 요소 컬렉션을 가져옵니다.
books.remove(xmlid);//지정된 위치의 하위 요소를 삭제합니다.
// 문자열 들여쓰기 = " ";
// 부울 newLines = true;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
형식 형식 = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
fo = new FileOutputStream(경로);
outp.output(doc, fo);
} 잡기(예외 e) {
System.err.println(e + "오류");
} 마지막으로 {
노력하다 {
fi.close();
fo.close();
} 잡기(예외 e) {
e.printStackTrace();
}
}
}
/**
* XML 파일 사양 정보 추가
*/
public static void AddXML(HttpServletRequest 요청)이 예외를 발생시킵니다.
FileInputStream fi = null;
FileOutputStream fo = null;
노력하다 {
request.setCharacterEncoding("GBK");
문자열 경로 = request.getParameter("path");
fi = new FileInputStream(경로);
SAXBuilder sb = new SAXBuilder();
문서 문서 = sb.build(fi);
Element root = doc.getRootElement(); // 루트 요소를 가져옵니다.
List books = root.getChildren(); // 루트 요소의 모든 하위 요소 컬렉션을 가져옵니다.
String bookname = request.getParameter("bookname");
String 작성자 = request.getParameter("author");
String 가격 = request.getParameter("가격");
String pub = request.getParameter("pub");
String pubdate = request.getParameter("pubdate");
// 텍스트 newtext;
Element newbook = new Element("책");
Element newname = new Element("책 제목");
newname.setText(책이름);
newbook.addContent(새이름);
Element newauthor = new Element("저자");
newauthor.setText(저자);
newbook.addContent(newauthor);
Element newpub = new Element("출판사");
newpub.setText(pub);
newbook.addContent(newpub);
요소 newprice = new 요소("가격");
newprice.setText(가격);
newbook.addContent(newprice);
Element newdate = new Element("출판일");
newdate.setText(pubdate);
newbook.addContent(newdate);
books.add(newbook);//하위 요소 추가
// 문자열 들여쓰기 = " ";
// 부울 newLines = true;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
형식 형식 = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
fo = new FileOutputStream(경로);
outp.output(doc, fo);
} 잡기(예외 e) {
System.err.println(e + "오류");
} 마지막으로 {
노력하다 {
fi.close();
fo.close();
} 잡기(예외 e) {
e.printStackTrace();
}
}
}
/**
* XML 파일에 지정된 정보 수정
*/
public static void EditXML(HttpServletRequest 요청)이 예외를 발생시킵니다.
FileInputStream fi = null;
FileOutputStream fo = null;
노력하다 {
request.setCharacterEncoding("GBK");
문자열 경로 = request.getParameter("path");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = new FileInputStream(경로);
SAXBuilder sb = new SAXBuilder();
문서 문서 = sb.build(fi);
Element root = doc.getRootElement(); // 루트 요소를 가져옵니다.
List books = root.getChildren(); // 루트 요소의 모든 하위 요소 컬렉션을 가져옵니다.
요소 book = (요소) books.get(xmlid);
String bookname = request.getParameter("bookname");
String 작성자 = request.getParameter("author");
String 가격 = request.getParameter("가격");
String pub = request.getParameter("pub");
String pubdate = request.getParameter("pubdate");
// 텍스트 newtext;
요소 newname = book.getChild("책 제목");
newname.setText(bookname);//책 이름을 새 제목으로 수정합니다.
요소 newauthor = book.getChild("저자");
newauthor.setText(저자);
요소 newpub = book.getChild("출판사");
newpub.setText(pub);
요소 newprice = book.getChild("가격");
newprice.setText(가격);
요소 newdate = book.getChild("출판 날짜");
newdate.setText(pubdate);
//books.set(xmlid,book);//하위 요소 수정
// 문자열 들여쓰기 = " ";
// 부울 newLines = true;
// XMLOutputter outp = new XMLOutputter(indent, newLines, "GBK");
형식 형식 = Format.getPrettyFormat();
format.setIndent(" ");
format.setEncoding("utf-8");
XMLOutputter outp = new XMLOutputter(format);
fo = new FileOutputStream(경로);
outp.output(doc, fo);
} 잡기(예외 e) {
System.err.println(e + "오류");
} 마지막으로 {
노력하다 {
fi.close();
fo.close();
} 잡기(예외 e) {
e.printStackTrace();
}
}
}
}
다음은 동작을 위한 jsp 파일이다: test.jsp
<%@ 페이지 contentType="text/html;charset=GBK"%>
<%@ 페이지 언어="java" import="java.util.*,jdom.test.*"%>
<html>
<머리>
<title>XML 파일 데이터 읽기</title>
</head>
<본문>
<h3 align="center">JDOM 작업 XML 파일</h3>
<p align="center">XML 파일의 모든 데이터 읽기</p>
<중앙>
<테이블 테두리="1" cellpadding="0" 세포 간격="1"
style="border-collapse:collapse" width="80%" id="AutoNumber1">
<tr>
<td align="center" width="92">책 제목</td>
<td align="center" width="92">저자</td>
<td align="center" width="92">출판사</td>
<td align="center" width="92">가격</td>
<td align="center" width="92">출판일</td>
<td align="center" width="94">작업</td>
</tr>
</table>
<%
문자열 경로 = application.getRealPath("/JDOM/MyXml.xml");
XmlBean xml = new XmlBean();
벡터 xmlall = xml.LoadXML(경로);
for (int i = 0; i < xmlall.size(); i++) {
xml = (XmlBean) xmlall.elementAt(i);
/**out.println("책 이름:"+xml.getbookname()+"<br>");
out.println("저자:"+xml.getauthor()+"<br>");
out.println("출판사:"+xml.getpub()+"<br>");
out.println("가격:"+xml.getprice()+"<br>");
out.println("출판 날짜:"+xml.getpubdate()+"<br><br>");
*/
%>
<테이블 테두리="1" cellpadding="0" 세포 간격="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%>">삭제</a></td>
</tr>
</table>
<%}%></center>
<form method="POST" action="xmlaction.jsp">
<p align="center"><input type="radio" value="add" selected name="act">정보 추가
<input type="radio" value="edit" name="act">데이터 일련 번호 편집:<select size="1"
이름="ID">
<%for (int i = 0; i < xmlall.size(); i++) {%>
<option value="<%=i%>">기사 <%=i + 1%></option>
<%}%>
</select><br>
책 제목:<input type="text" name="bookname" size="20"><br>
작성자:<input type="text" name="author" size="20"><br>
게시자:<input type="text" name="pub" size="20"><br>
가격:<input type="text" name="price" size="20"><br>
날짜:<input type="text" name="pubdate" size="20"></p>
<input type="hidden" name="path" value="<%=path%>">
<p align="center"><input type="submit" value="제출" name="B1"><input
type="reset" value="재설정" name="B2"></p>
</form>
</body>
</html>
다음은 이전 파일의 제출을 처리하는 jsp 파일입니다. xmlation.jsp
<%@ 페이지 contentType="text/html;charset=GBK"%>
<%@ 페이지 언어="java" import="jdom.test.*"%>
<%if (request.getParameter("act") != null
&& request.getParameter("act").equals("add")) {
XmlBean.AddXML(요청);
out.println("<p align='center'><br><br>성공적으로 추가되었습니다<br><br><a href='test.jsp'>반환</a>");
} else if (request.getParameter("act") != null
&& request.getParameter("act").equals("del")) {
XmlBean.DelXML(요청);
out.println("<p align='center'><br><br>삭제 성공<br><br><a href='test.jsp'>반환</a>");
} else if (request.getParameter("act") != null
&& request.getParameter("act").equals("edit")) {
XmlBean.EditXML(요청);
out.println("<p align='center'><br><br>수정 성공<br><br><a href='test.jsp'>반환</a>");
} 또 다른 {
out.print("<p align='center'><br><br>잘못된 작업<br><br><a href='test.jsp'>반환</a>");
}
%>
/================================본문 끝============== == ========================/
주목:
1. XmlBean.java 파일의 파라오 이름 텍스트 중 노란색 부분이 수정, 보라색 부분이 원본 프로그램의 작성 방식입니다!
2. MyXml.xml 파일의 기본 인코딩이 weblogic 8에서 GBK 또는 GB2312를 구문 분석할 때 항상 비정상적이기 때문에 인코딩="utf-8"로 변경되었습니다. Tomcat은 괜찮으며, weblogic 자체의 기본 xml일 수도 있습니다. 파서는 GBK를 지원하지 않습니다. 이 문제는 해결되지 않았습니다. 해결 방법을 알고 있는 전문가가 있으면 이 게시물에 답글을 달아주세요~~ 모두 감사합니다!