الإعلانات

هل ترغب في تعلم كيفية قراءة وكتابة ملف XML من جافا؟

ملفات XML ما هو ملف XML وكيف يمكنك فتحه واستخدامه؟ربما رأيت مصطلح "XML". ربما تكون قد فتحت ملف XML عن طريق الخطأ. ما هو XML وكيف تستخدمه؟ اقرأ أكثر تستخدم لمجموعة متنوعة من الأغراض بما في ذلك تخزين البيانات. قبل أن تصبح JSON شائعة ، كانت XML هي التنسيق المفضل لتمثيل البيانات المهيكلة وتخزينها ونقلها. على الرغم من أن شعبية XML قد تضاءلت في السنوات الأخيرة ، فقد تواجهها من حين لآخر ، لذا من المهم معرفة كيفية التعامل معها من التعليمات البرمجية.

جافا الإصدار القياسي (SE) 10 مفاهيم Java الأساسية التي يجب أن تتعلمها عند البدءسواء كنت تكتب واجهة مستخدم رسومية أو تطور برنامجًا من جانب الخادم أو تطبيقًا للهاتف المحمول باستخدام Android ، فإن تعلم Java ستخدمك جيدًا. فيما يلي بعض مفاهيم Java الأساسية لمساعدتك على البدء. اقرأ أكثر يتضمن Java API لمعالجة XML (JAXP)، وهو مصطلح شامل يغطي معظم جوانب معالجة XML. وتشمل هذه:

  • DOM: يشتمل نموذج كائن المستند على فئات للعمل مع عناصر XML مثل العنصر والعقدة والسمات وما إلى ذلك. تقوم واجهة برمجة تطبيقات DOM بتحميل مستند XML الكامل في الذاكرة للمعالجة ، لذا فهي ليست مناسبة تمامًا للعمل مع ملفات XML الكبيرة.
    instagram viewer
  • ساكس: واجهة برمجة التطبيقات البسيطة لـ XML هي خوارزمية تعتمد على الأحداث لقراءة XML. هنا تتم معالجة XML عن طريق إطلاق الأحداث التي يتم العثور عليها عند قراءة XML. متطلبات الذاكرة لاستخدام هذه الطريقة منخفضة ، لكن العمل مع API أكثر تعقيدًا من العمل مع DOM.
  • ستاكس: يعد Streaming API لـ XML إضافة حديثة لواجهات برمجة تطبيقات XML ويوفر ترشيح تدفق عالي الأداء ومعالجة وتعديل XML. بينما يتجنب تحميل مستند XML بالكامل في الذاكرة ، فإنه يوفر بنية من النوع القابل للسحب بدلاً من ذلك من بنية تعتمد على الأحداث ، لذا فإن التطبيق أسهل في البرمجة والفهم من استخدام SAX API.

في هذه المقالة ، نستخدم ملف واجهة برمجة تطبيقات DOM لشرح كيفية قراءة وكتابة ملفات XML من جافا. سنغطي واجهتي API الأخريين في المقالات المستقبلية.

نموذج ملف XML

لغرض هذه المقالة ، نوضح المفاهيم باستخدام نموذج XML التالي ، والذي يمكن العثور عليه هنا:

 1.0?>جامبارديلا ، ماثيودليل مطور XML
الحاسوب44.952000-10-01نظرة متعمقة في إنشاء التطبيقات باستخدام XML.رالز ، كيم... 

قراءة ملف XML

دعونا نلقي نظرة على الخطوات الأساسية المطلوبة لقراءة ملف XML باستخدام DOM API.

الخطوة الأولى هي الحصول على مثيل DocumentBuilder. يستخدم المنشئ لتحليل مستندات XML. للاستخدام الأساسي ، نقوم بذلك على النحو التالي:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance () ؛ factory.setNamespaceAware (خطأ) ؛ factory.setValidating (false) ؛ DocumentBuilder builder = factory.newDocumentBuilder () ؛ 

يمكننا الآن تحميل المستند بالكامل في الذاكرة بدءًا من عنصر جذر XML. في مثالنا ، هو فهرس عنصر.

ملف الملف =... ؛ // ملف XML للقراءة. مستند المستند = builder.parse (ملف) ؛ كتالوج العناصر = document.getDocumentElement () ؛ 

وهذا كل شيء يا رفاق! واجهة برمجة تطبيقات DOM لقراءة XML بسيطة حقًا. يمكنك الآن الوصول إلى مستند XML بالكامل بدءًا من عنصر الجذر الخاص به ، فهرس. دعونا نرى الآن كيفية التعامل معها.

باستخدام واجهة برمجة تطبيقات DOM

الآن بعد أن أصبح لدينا جذر XML عنصر، يمكننا استخدام واجهة برمجة تطبيقات DOM لاستخراج شذرات من المعلومات المثيرة للاهتمام.

احصل على جميع ملفات الكتاب أطفال عنصر الجذر وحلقة عليهم. لاحظ أن getChildNodes () عائدات الكل الأطفال ، بما في ذلك النصوص والتعليقات وما إلى ذلك. لغرضنا ، نحتاج فقط إلى العناصر الفرعية ، لذلك نتخطى العناصر الأخرى.

كتب NodeList =atalog.getChildNodes () ، لـ (int i = 0، ii = 0، n = books.getLength ()؛ أنا 

كيف تجد عنصرًا فرعيًا معينًا ، بالنظر إلى الوالد؟ تقوم الطريقة الثابتة التالية بإرجاع أول عنصر مطابق إذا تم العثور عليه أو فارغًا. كما ترى ، يتضمن الإجراء الحصول على قائمة بالعقد الفرعية والتكرار من خلالها لاختيار عقد العناصر بالاسم المحدد.

البحث عن العقدة الثابتة الخاصة ، FirstNamedElement (أصل العقدة ، اسم علامة السلسلة) {NodeList children = parent.getChildNodes () ، لـ (int i = 0 ، in = children.getLength () ؛ أنا 

لاحظ أن واجهة برمجة تطبيقات DOM تتعامل مع محتوى النص داخل عنصر ما كعقدة منفصلة من النوع TEXT_NODE. بالإضافة إلى ذلك ، يمكن تقسيم محتوى النص إلى عدة عقد نصية متجاورة. لذا فإن المعالجة الخاصة التالية مطلوبة لجلب محتوى النص داخل عنصر.

سلسلة خاصة ثابتة getCharacterData (أصل العقدة) {StringBuilder text = new StringBuilder () ؛ إذا (الأصل == فارغة) إرجاع text.toString () ؛ أبناء NodeList = parent.getChildNodes () ، لـ (int k = 0، kn = children.getLength () ؛ ك 

مسلحين بوظائف الراحة هذه ، دعونا الآن نلقي نظرة على بعض التعليمات البرمجية لإدراج بعض المعلومات من نموذج XML الخاص بنا. نود أن نعرض معلومات مفصلة عن كل كتاب ، مثل ما سيكون متاحًا في كتالوج الكتب.

كتب NodeList =atalog.getChildNodes () ، لـ (int i = 0، ii = 0، n = books.getLength ()؛ أنا 

كتابة إخراج XML

توفر Java ملف XML Tranform API لتحويل بيانات XML. نحن نستخدم واجهة برمجة التطبيقات هذه مع ملف تحويل الهوية لتوليد الإخراج.

كمثال ، دعونا نضيف ملف الكتاب عنصر في كتالوج العينة المعروض أعلاه. تفاصيل الكتاب (مثل مؤلف, لقب، إلخ) خارجيًا ، ربما من ملف خصائص أو قاعدة بيانات. نستخدم ملف الخصائص التالي لتحميل البيانات.

المعرف = bk113. المؤلف = جين اوستن. العنوان = كبرياء وتحامل. النوع = الرومانسية. السعر = 6.99. publish_date = 2010-04-01. description = "إنها حقيقة معترف بها عالميا ، أن الرجل العازب الذي يمتلك ثروة طيبة يجب أن يكون في حاجة إلى زوجة." هكذا يبدأ الكبرياء و Prejudice ، الكوميديا ​​البارعة عن الأخلاق لجين أوستن - واحدة من أكثر الروايات شعبية في كل العصور - والتي تتميز بوجود سجال حضاري رائع بين السيد دارسي الفخور والمتحيزة إليزابيث بينيت أثناء لعبهما للتودد المليء بالحيوية في سلسلة من غرفة الرسم في القرن الثامن عشر المؤامرات. 

الخطوة الأولى هي تحليل ملف XML الحالي باستخدام الطريقة المعروضة أعلاه. يظهر الرمز أيضًا أدناه.

ملف الملف =... ؛ // ملف XML للقراءة. مستند المستند = builder.parse (ملف) ؛ كتالوج العناصر = document.getDocumentElement () ؛ 

نقوم بتحميل البيانات من ملف الخصائص باستخدام الامتداد الخصائص فئة مع جافا. الكود بسيط للغاية ويظهر أدناه.

String propsFile =... ؛ خصائص props = خصائص جديدة () ؛ try (FileReader in = new FileReader (propsFile)) {props.load (in)؛ }

بمجرد تحميل الخصائص ، نسترجع القيم التي نريد إضافتها من ملف الخصائص.

معرف السلسلة = props.getProperty ("id") ؛ مؤلف السلسلة = props.getProperty ("author") ؛ عنوان السلسلة = props.getProperty ("العنوان") ؛ نوع السلسلة = props.getProperty ("النوع") ؛ سعر السلسلة = props.getProperty ("السعر") ؛ String publish_date = props.getProperty ("publish_date") ؛ String descr = props.getProperty ("وصف") ؛ 

دعونا الآن نخلق فارغة الكتاب عنصر.

كتاب العنصر = document.createElement ("كتاب") ؛ book.setAttribute ("معرف" ، معرف) ؛ 

إضافة العناصر الفرعية إلى الكتاب تافهة. للراحة ، نقوم بتجميع أسماء العناصر المطلوبة في ملف قائمة وأضف القيم في حلقة.

قائمةelnames = Arrays.asList ("المؤلف" ، "العنوان" ، "النوع" ، "السعر" ، "تاريخ النشر" ، "الوصف") ؛ لـ (String elname: elnames) {Element el = document.createElement (elname) ؛ Text text = document.createTextNode (props.getProperty (elname)) ؛ el.appendChild (نص) ؛ book.appendChild (el) ؛ } index.appendChild (كتاب) ؛

وهذه هي الطريقة التي يتم بها ذلك. ال فهرس العنصر الجديد الآن الكتاب تمت إضافة العنصر. كل ما تبقى الآن هو كتابة XML المحدث.

لكتابة XML ، نحتاج إلى مثيل محول الذي تم إنشاؤه كما هو موضح أدناه. لاحظ أننا نطلب المسافة البادئة لمخرج XML باستخدام امتداد setOutputProperty () طريقة.

TransformerFactory tfact = TransformerFactory.newInstance () ، محول tform = tfact.newTransformer () ، tform.setOutputProperty (OutputKeys. INDENT ، "نعم") ؛ tform.setOutputProperty ("{ http://xml.apache.org/xslt}indent-amount", "3"); 

الخطوة الأخيرة في إنشاء مخرجات XML هي تطبيق التحويل. تظهر النتيجة في تيار الإخراج ، System.out.

tform.transform (جديد DOMSource (مستند) ، StreamResult جديد (System.out)) ؛ 

لكتابة الإخراج مباشرة إلى ملف ، استخدم ما يلي.

tform.transform (جديد DOMSource (مستند) ، StreamResult جديد (ملف جديد ("output.xml"))) ؛ 

وهذا يختتم هذا المقال حول قراءة وكتابة ملفات XML باستخدام واجهة برمجة تطبيقات DOM.

هل استخدمت واجهة برمجة تطبيقات DOM في تطبيقاتك؟ كيف كان أداؤها؟ واسمحوا لنا أن نعرف في التعليقات أدناه.