DOM هي أداة تحليل قوية مناسبة للمستندات الصغيرة
لماذا تقول ذلك؟ لأنه سيتم تحميل مستند xml بأكمله في الذاكرة لتكوين شجرة كائنات المستند
بشكل عام، يبدو الأمر مخيفًا، لكن استخدامه لقراءة الأشياء الصغيرة أمر مريح جدًا مقارنةً بساكس.
أما بالنسبة لعمليات الإضافة والحذف وما إلى ذلك، فلا أخطط لكتابتها عندما كنت أشاهد البرنامج التعليمي، كدت أن أتقيأ بسبب الكود القبيح.
ولهذا السبب بالتحديد ظهرت أدوات مثل jdom وdom4j لاحقًا...
ليس هناك الكثير ليقوله، فقط اذهب إلى الكود
مثال تحليل دوم
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
عرض الطبقة العامة {
public static void main(String[] args) يطرح الاستثناء {
// إنشاء مثيل مصنع محلل وإنشاء محلل
DocumentBuilderFactory Factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder =factory.newDocumentBuilder();
// أنشئ كائن المستند الذي يحتاج إلى التحليل
الملف f = ملف جديد("books.xml");
// تحليل المستند وإرجاع كائن المستند في هذا الوقت، تم تحميل مستند XML في الذاكرة.
// حسنًا، لنجعل التحليل أكثر كثافة، والباقي هو الحصول على البيانات.
المستند doc = builder.parse(f);
// احصل على العنصر الجذر للمستند
// تسألني لماذا أفعل هذا؟ لأن كائن المستند نفسه عبارة عن بنية شجرة، وهذا هو جذر الشجرة.
// بالطبع، يمكنك أيضًا العثور على مجموعة العناصر مباشرةً وحذف هذه الخطوة
جذر العنصر = doc.getDocumentElement();
// تم العثور على العقدة الجذرية أعلاه، وهنا نبدأ في الحصول على مجموعة العناصر الموجودة أسفل العقدة الجذرية.
قائمة NodeList = root.getElementsByTagName("book");
for (int i = 0; i < list.getLength(); i++) {
// ابحث عن العقدة في المجموعة من خلال طريقة item() وقم بتحويلها إلى كائن Element
العنصر n = (العنصر) list.item(i);
// احصل على خريطة السمات في الكائن، واستخدم حلقة for للاستخراج والطباعة
عقدة NamedNodeMap = n.getAttributes();
for (int x = 0; x < العقدة.getLength(); x++) {
العقدة nn = العقدة.item(x);
System.out.println(nn.getNodeName() + ": " + nn.getNodeValue());
}
// محتوى عنصر الطباعة، الكود معقد للغاية، وتنسيق ثابت تقريبًا
System.out.println("title: " +n.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
System.out.println("author: " + n.getElementsByTagName("author").item(0).getFirstChild().getNodeValue());
System.out.println();
}
}
}
نتيجة الإخراج: