يوجد أدناه اختبار قراءة XML كتبته بنفسي
انسخ رمز الكود كما يلي:
import java.util.Iterator;
import java.io.BufferedReader;
استيراد java.io.File؛
import java.io.IOException;
استيراد java.io.InputStreamReader؛
import java.net.MalformedURLException;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
الطبقة العامة XmlRead {
static StringBuilder sBuilder = new StringBuilder();
public static void main(String[] args) يلقي IOException {
BufferedReader bReader = BufferedReader الجديد (new InputStreamReader (
System.in));
مسار السلسلة = فارغ؛
System.out.println("الرجاء إدخال المسار المطلق واسم الملف لملف XML:/n");
المسار = bReader.readLine();
sBuilder.append("بدء إخراج محتوى ملف XML/n");
وثيقة الوثيقة = فارغة؛
يحاول {
المستند = قراءة (المسار)؛
sBuilder.append(path + "/n");
} التقاط (MalformedURLException e) {
printStackTrace();
} قبض على (DocumentException e) {
printStackTrace();
}
جذر العنصر = getRootElement(document);
إذا (الجذر == فارغ) {
System.out.print("لم يتم الحصول على العقدة الجذرية");
يعود؛
}
// احصل على تنسيق الترميز لمستند XML
String encString = document.getXMLEncoding();
sBuilder.append("<?xml version=/"1.0/" encoding=/"" + encString
+ "/">/n");
sBuilder.append(elementText(root, attText(root), 0));
System.out.println(getIterator(root, 0) + "</" + root.getName() + ">");
}
/**
* العقدة العودية
*
* @وصف
* @عنصر المعلمة
* @param المستوى
* مستوى
* @يعود
*/
سلسلة ثابتة خاصة getIterator(Element element, int lvl) {
لفل += 1؛
for (Iterator i = element.elementIterator(); i.hasNext();) {
العنصر e = (العنصر) i.next();
sBuilder.append(elementText(e, attText(e), lvl));
getIterator(e, lvl);
int count = e.nodeCount();
إذا (العد > 0) {
لـ (int j = 0; j < lvl; j++) {
sBuilder.append(" ");
}
}
sBuilder.append("</" + e.getName() + ">/n");
}
إرجاع sBuilder.toString();
}
/**
* احصل على قيمة السلسلة لسمة العقدة الحالية
*
* @وصف
* @عنصر المعلمة
* العقدة الحالية
* @يعود
*/
سلسلة ثابتة خاصة attText (عنصر العنصر) {
سلسلة str = " "؛
for (int i = 0; i < element.attributeCount(); i++) {
سمة السمة = element.attribute(i);
str += attribute.getName() + "=/"" + attribute.getValue() + "/" "؛
}
شارع العودة؛
}
/**
* الحصول على القيمة النصية للعنصر الحالي
*
* @وصف
* @عنصر المعلمة
* عقدة العنصر الحالي
* @نص المعلمة
* قيمة السمة
* @param المستوى
* مستوى
* @يعود
*/
سلسلة ثابتة خاصة elementText(Element element, String text, int lvl) {
سلسلة سلسلة = ""؛
لـ (int i = 0; i < lvl; i++) {
str += " "؛
}
str += "<" + element.getName();
إذا (نص!= نص && فارغ!= "") {
str += text;
}
// نظرًا لعدم وجود سمة أو طريقة hasChild في dom4j، يجب استخدام طريقةNodeCount() لتحديد ما إذا كانت هناك عقد فرعية.
int count = element.nodeCount();
إذا (العدد == 0) {
return str += ">";
}
return str += ">/n";
}
/**
*
* @description قراءة ملف XML
* ملفparam
* مسار ملف XML، بما في ذلك اسم الملف
* @return مستند الوثيقة
* @throws MalformedURLException
* @throws DocumentException
*/
قراءة المستند الثابت العام (ملف سلسلة) يلقي MalformedURLException،
استثناء المستند {
قارئ SAXReader = جديد SAXReader();
مستند المستند = Reader.read(new File(file));
وثيقة العودة
}
/**
* احصل على العقدة الجذرية للمستند
*
* @وثيقة المعلمة
* @يعود
*/
العنصر الثابت العام getRootElement(مستند المستند) {
إرجاع document.getRootElement();
}
}