العمل مع XML في Java: DOM، SAX، StAX و JAXB

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع XML في Java: DOM، SAX، StAX و JAXB



XML (لغة الترميز القابلة للتوسيع) لا يزال أحد التنسيقات الرئيسية لتخزين ونقل البيانات المنظمة. في Java، توجد عدة طرق للعمل مع XML، كل منها مناسب لمهام مختلفة: من قراءة التكوينات الصغيرة إلى معالجة ملفات بحجم غيغابايت. في هذه المقالة، سنستعرض أربعة مناهج رئيسية: DOM، SAX، StAX و JAXB.



1. DOM (نموذج كائن المستند) — التحميل الكامل في الذاكرة



محلل DOM يقوم بتحميل مستند XML بأكمله في الذاكرة، مما ينشئ هيكلًا شجريًا. هذا مناسب للتنقل والتعديل، لكنه غير فعال للملفات الكبيرة.



مثال على قراءة XML باستخدام DOM:



import javax.xml.parsers.*;import org.w3c.dom.*;

public class DomExample { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse("books.xml");

NodeList bookList = doc.getElementsByTagName("book"); for (int i = 0; i < bookList.getLength(); i++) { Element book = (Element) bookList.item(i); String title = book.getElementsByTagName("title").item(0).getTextContent(); String author = book.getElementsByTagName("author").item(0).getTextContent(); System.out.println("الكتاب: " + title + "، المؤلف: " + author); } }}


  • الإيجابيات: وصول مريح لأي عقدة، دعم XPath، إمكانية تعديل المستند.
  • السلبيات: يتطلب ذاكرة كبيرة، بطيء للملفات الكبيرة.
  • متى يُستخدم: ملفات التكوين، المستندات الصغيرة (حتى بضعة ميغابايت).


2. SAX (واجهة برمجة تطبيقات بسيطة لـ XML) — محلل تدفقي قائم على الأحداث



SAX يقرأ XML بشكل تسلسلي ويولد أحداثًا (بداية عنصر، نص، نهاية عنصر). أنت تعالج فقط الأحداث المطلوبة — وهذا يسمح بالعمل مع ملفات من أي حجم.



مثال على معالجة XML باستخدام SAX:



import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;

public class SaxExample extends DefaultHandler { private boolean inTitle = false;

public void startElement(String uri, String localName, String qName, Attributes attrs) { if (qName.equals("title")) inTitle = true; }

public void characters(char[] ch, int start, int length) { if (inTitle) System.out.println("العنوان: " + new String(ch, start, length)); }

public void endElement(String uri, String localName, String qName) { if (qName.equals("title")) inTitle = false; }

public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse("books.xml", new SaxExample()); }}


  • الإيجابيات: استهلاك ضئيل للذاكرة، سرعة عالية.
  • السلبيات: لا يمكن العودة إلى عنصر سابق، صعوبة تعديل المستند.
  • متى يُستخدم: ملفات XML كبيرة (سجلات، تفريغات قواعد البيانات، تقارير).


3. StAX (واجهة برمجة تطبيقات التدفق لـ XML) — محلل تدفقي مع تحكم بالمؤشر



StAX هو بديل أكثر حداثة لـ SAX. أنت تتحكم في القراءة بنفسك، عن طريق تحريك المؤشر عبر تدفق XML. يتوفر وضعان: Cursor API (مكرر الأحداث) و Event API (معالجة الأحداث).



مثال مع Cursor API (XMLStreamReader):



import javax.xml.stream.*;

public class StaxExample { public static void main(String[] args) throws Exceptio

توصيات