هذه المقالة جيدة ~ فهي تنشئ العمليات الأساسية لـ JDOM، ومع ذلك، نظرًا لأن إصدار JDOM الذي استخدمه المؤلف في ذلك الوقت كان لا يزال قديمًا نسبيًا، فسيتم تجميع بعض الرموز بشكل غير صحيح! دعم اللغة الصينية ليس جيدًا أيضًا! لذلك قام فرعون بإجراء تعديلات على البرنامج بناءً على عمل المؤلف الأصلي! أخطاء الترجمة الثابتة والأحرف الصينية المشوهة. أنشرها ليستفيد منها الجميع.
بيئة الاختبار: jdom1.0، weblogic 8.1sp2، tomcat 5.0، IE 6.0
/=============================================================================================================== = ===================/
جافا + XML = JDOM!
هذا هو هدف مصممي JDOM. إذا كنت قد استخدمت SAX أو DOM المزعجين لمعالجة XML، فستعرف سبب الحاجة إلى JDOM أو JAXB. في مؤتمر JavaOne لهذا العام (2002)، ألقى جايسون هنتر، المؤسس الرئيسي لـ JDOM، خطابًا رائعًا يقدم فيه تقنية JDOM، بعنوان JDOM يجعل XML سهلاً.
الحصول على وتثبيت JDOM
يمكن تنزيل أحدث إصدار من JDOM من http://jdom.org . خذ الإصدار الثنائي من JDOM 1.0 كمثال. بعد التنزيل، قم بفك ضغطه. ملف JDOM jar هو الملف jdom.jar الموجود في دليل البناء وأضفه إلى مسار الفصل. بالإضافة إلى ذلك، يحتاج JDOM أيضًا إلى دعم ملفات jar الموجودة في دليل lib مثل xerces.jar وjaxp.jar. إذا حدث الخطأ التالي أثناء الاستخدام:
java.lang.NoSuchMethodError
أو
java.lang.NoClassDefFoundError: org/xml/sax/SAXNotRecognizedException
يجب عليك التأكد من وجود ملف xerces.jar قبل فئات XML الأخرى، مثل JAXP أو Crimson، في CLASSPATH. قد لا تدعم ملفات الفئات هذه، بما في ذلك الإصدارات الأقدم السابقة من xerces، SAX2.0 أو DOM Level 2. أدى هذا إلى الخطأ أعلاه.
مثال بسيط
تشبه طريقة معالجة JDOM إلى حد ما طريقة DOM، ولكن يتم تنفيذها بشكل أساسي باستخدام SAX، لذلك لا داعي للقلق بشأن مشكلات سرعة المعالجة والذاكرة. بالإضافة إلى ذلك، لا توجد واجهات تقريبًا في JDOM، وجميع الفئات هي فئات حقيقية، ولا توجد فئات مصنع للفئات.
ما يلي هو ملف XML المستخدم للمثال: MyXml.xml
<?xml version="1.0" encoding="utf-8"?>
<المكتبة>
<كتاب>
<عنوان الكتاب>مقدمة إلى برمجة جافا</عنوان الكتاب>
<Author>تشانغ سان</Author>
<دار النشر>دار النشر الإلكتروني</دار النشر>
<السعر>35.0</السعر>
<تاريخ النشر>2002-10-07</تاريخ النشر>
</كتاب>
<كتاب>
<عنوان الكتاب>تطبيق XML في جافا</عنوان الكتاب>
<Author>لي سي</Author>
<دار النشر>دار الأمل للنشر</دار النشر>
<السعر>92.0</السعر>
<تاريخ النشر>2002-10-07</تاريخ النشر>
</كتاب>
</المكتبة>
فيما يلي الفاصوليا التي تعمل على ملفات XML: XmlBean.java
package
jdom.test;
* عملية قراءة وكتابة XML Bean
*/
استيراد java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;
استيراد javax.servlet.*;
import javax.servlet.http.*;
public class XmlBean {
اسم الكتاب سلسلة خاصة، المؤلف، حانة، السعر، تاريخ النشر؛
public String getbookname() {
عودة اسم الكتاب؛
}
سلسلة عامة getauthor() {
مؤلف العودة؛
}
سلسلة عامة getpub() {
حانة العودة؛
}
سلسلة عامة getprice() {
سعر العودة
}
سلسلة عامة getpubdate() {
إرجاع النشر؛
}
اسم كتاب الفراغ العام (اسم كتاب السلسلة) {
this.bookname = bookname;
}
مجموعة المؤلف باطلة عامة (مؤلف السلسلة) {
this.author = Author;
}
مجموعة باطلة عامة (سلسلة حانة) {
this.pub = pub;
}
سعر تحديد الفراغ العام (سعر السلسلة) {
this.price = السعر;
}
مجموعة الفراغ العام (سلسلة النشر) {
this.pubdate = pubdate;
}
عامة XmlBean() {
}
/**
* قراءة جميع المعلومات من ملف XML
*/
يطرح Vector LoadXML العام (مسار السلسلة) استثناءً {
Vector xmlVector = null;
FileInputStream fi = null;
يحاول {
fi = new FileInputStream(path);
xmlVector = new Vector();
SAXBuilder sb = new SAXBuilder();
المستند doc = sb.build(fi);
جذر العنصر = doc.getRootElement(); // احصل على العنصر الجذر
قائمة الكتب = root.getChildren(); // احصل على مجموعة جميع العناصر الفرعية للعنصر الجذر
كتاب العناصر = فارغ؛
XmlBean xml = null;
لـ (int i = 0; i < books.size(); i++) {
xml = new XmlBean();
book = (Element) books.get(i); // احصل على عنصر الكتاب الأول
xml.setbookname(book.getChild("اسم الكتاب").getText());
xml.setauthor(book.getChild("Author").getText());
xml.setpub(book.getChild("دار النشر").getText());
xml.setprice(book.getChild("price").getText());
xml.setpubdate(book.getChild("تاريخ النشر").getText());
xmlVector.add(xml);
}
} قبض (الاستثناء ه) {
System.err.println(e + "خطأ");
} أخيراً {
يحاول {
fi. Close();
} قبض (الاستثناء ه) {
printStackTrace();
}
}
إرجاع xmlVector;
}
/**
* حذف المعلومات المحددة لملف XML
*/
DelXML الفراغي العام الثابت (طلب HttpServletRequest) يطرح الاستثناء {
FileInputStream fi = null;
FileOutputStream fo = null;
يحاول {
request.setCharacterEncoding("GBK");
مسار السلسلة = request.getParameter("path");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
المستند doc = sb.build(fi);
جذر العنصر = doc.getRootElement(); // احصل على العنصر الجذر
قائمة الكتب = root.getChildren(); // احصل على مجموعة جميع العناصر الفرعية للعنصر الجذر
books.remove(xmlid);// احذف العنصر الفرعي في الموضع المحدد
// مسافة بادئة للسلسلة = " "؛
// boolean 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(path);
outp.output(doc, fo);
} قبض (الاستثناء ه) {
System.err.println(e + "خطأ");
} أخيراً {
يحاول {
fi. Close();
fo.Close();
} قبض (الاستثناء ه) {
printStackTrace();
}
}
}
/**
* إضافة معلومات مواصفات ملف XML
*/
الفراغ العام الثابت AddXML (طلب HttpServletRequest) يطرح الاستثناء {
FileInputStream fi = null;
FileOutputStream fo = null;
يحاول {
request.setCharacterEncoding("GBK");
مسار السلسلة = request.getParameter("path");
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
المستند doc = sb.build(fi);
جذر العنصر = doc.getRootElement(); // احصل على العنصر الجذر
قائمة الكتب = root.getChildren(); // احصل على مجموعة جميع العناصر الفرعية للعنصر الجذر
String bookname = request.getParameter("bookname");
مؤلف السلسلة = request.getParameter("author");
سعر السلسلة = request.getParameter("price");
String pub = request.getParameter("pub");
String pubdate = request.getParameter("pubdate");
// نص نص جديد؛
العنصر newbook = العنصر الجديد("book");
العنصر newname = new Element("عنوان الكتاب");
newname.setText(bookname);
newbook.addContent(newname);
العنصر newauthor = new Element("author");
newauthor.setText(author);
newbook.addContent(newauthor);
Element newpub = new Element("دار النشر");
newpub.setText(pub);
newbook.addContent(newpub);
العنصر newprice = new Element("price");
newprice.setText(price);
newbook.addContent(newprice);
العنصر newdate = العنصر الجديد("تاريخ النشر");
newdate.setText(pubdate);
newbook.addContent(newdate);
books.add(newbook);// أضف عناصر فرعية
// مسافة بادئة للسلسلة = " "؛
// boolean 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(path);
outp.output(doc, fo);
} قبض (الاستثناء ه) {
System.err.println(e + "خطأ");
} أخيراً {
يحاول {
fi. Close();
fo.Close();
} قبض (الاستثناء ه) {
printStackTrace();
}
}
}
/**
* تعديل المعلومات المحددة لملف XML
*/
EditXML الفراغ الثابت العام (طلب HttpServletRequest) يطرح الاستثناء {
FileInputStream fi = null;
FileOutputStream fo = null;
يحاول {
request.setCharacterEncoding("GBK");
مسار السلسلة = request.getParameter("path");
int xmlid = Integer.parseInt(request.getParameter("id"));
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
المستند doc = sb.build(fi);
جذر العنصر = doc.getRootElement(); // احصل على العنصر الجذر
قائمة الكتب = root.getChildren(); // احصل على مجموعة جميع العناصر الفرعية للعنصر الجذر
كتاب العنصر = (العنصر) books.get(xmlid);
String bookname = request.getParameter("bookname");
مؤلف السلسلة = request.getParameter("author");
سعر السلسلة = request.getParameter("price");
String pub = request.getParameter("pub");
String pubdate = request.getParameter("pubdate");
// نص نص جديد؛
العنصر newname = book.getChild("عنوان الكتاب");
newname.setText(bookname);// تعديل اسم الكتاب إلى عنوان جديد
العنصر newauthor = book.getChild("Author");
newauthor.setText(author);
Element newpub = book.getChild("دار النشر");
newpub.setText(pub);
العنصر newprice = book.getChild("price");
newprice.setText(price);
العنصر newdate = book.getChild("تاريخ النشر");
newdate.setText(pubdate);
//books.set(xmlid,book);// تعديل العناصر الفرعية
// مسافة بادئة للسلسلة = " "؛
// boolean 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(path);
outp.output(doc, fo);
} قبض (الاستثناء ه) {
System.err.println(e + "خطأ");
} أخيراً {
يحاول {
fi. Close();
fo.Close();
} قبض (الاستثناء ه) {
printStackTrace();
}
}
}
}
ما يلي هو ملف jsp للعملية: test.jsp
<%@ page contentType="text/html;charset=GBK"%>
<%@page language="java" import="java.util.*,jdom.test.*"%>
<أتش تي أم أل>
<الرأس>
<title>قراءة بيانات ملف XML</title>
</الرأس>
<الجسم>
<h3 align="center">ملف XML لعملية JDOM</h3>
<p align="center">اقرأ جميع البيانات الموجودة في ملف XML</p>
<المركز>
<حدود الجدول = "1" خلية الحشو = "0" تباعد الخلايا = "1"
style="border-collapse:lapse" width="80%" id="AutoNumber1">
<تر>
<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>
</الجدول>
<%
مسار السلسلة = application.getRealPath("/JDOM/MyXml.xml");
XmlBean xml = new XmlBean();
Vector xmlall = xml.LoadXML(path);
لـ (int i = 0; i < xmlall.size(); i++) {
xml = (XmlBean) xmlall.elementAt(i);
/**out.println("اسم الكتاب:"+xml.getbookname()+"<br>");
println("المؤلف:"+xml.getauthor()+"<br>");
out.println("دار النشر:"+xml.getpub()+"<br>");
println("السعر:"+xml.getprice()+"<br>");
out.println("تاريخ النشر:"+xml.getpubdate()+"<br><br>");
*/
%>
<حدود الجدول = "1" خلية الحشو = "0" تباعد الخلايا = "1"
style="border-collapse:lapse" width="80%" id="AutoNumber2">
<تر>
<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>
</الجدول>
<%}%></center>
<طريقة النموذج = "POST" action = "xmlaction.jsp">
<p align="center"><input type="radio" value="add" محدد الاسم="act">إضافة معلومات
<input type = "radio" value = "edit" name = "act"> تحرير الرقم التسلسلي للبيانات: <select size = "1"
الاسم = "المعرف">
<%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>
السعر: <نوع الإدخال = "نص" اسم = "السعر" الحجم = "20"> <br>
التاريخ:<input type="text" name="pubdate" size="20"></p>
<نوع الإدخال = "مخفي" اسم = "مسار" قيمة = "<%=مسار%>">
<p align="center"><input type="submit" value="Submit" name="B1"><input
اكتب = "إعادة تعيين" قيمة = "إعادة تعيين" اسم = "B2"></p>
</النموذج>
</الجسم>
</html>
ما يلي هو ملف jsp الذي يعالج إرسال الملف السابق: 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(request);
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(request);
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(request);
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 إلى encoding = "utf-8" لأنه دائمًا ما يكون غير طبيعي عند تحليل GBK أو GB2312 ضمن weblogic 8. Tomcat جيد، وقد يكون ملف xml الافتراضي الخاص بـ weblogic المحلل اللغوي لا يدعم GBK ولم يتم حل هذه المشكلة إذا كان أي خبير يعرف الحل، يرجى الرد على هذا المنشور وإخباري ~~ شكرًا لكم جميعًا!