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

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

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





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





Java Standard Edition (SE) يتضمن Java API لمعالجة XML (JAXP) ، وهو مصطلح شامل يغطي معظم جوانب معالجة XML. وتشمل هذه:





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

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

نموذج ملف XML

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






Gambardella, Matthew
XML Developer's Guide
Computer
44.95
2000-10-01
An in-depth look at creating applications
with XML.


Ralls, Kim
...

قراءة ملف XML

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

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





إلغاء تثبيت سكايب للأعمال ويندوز 10
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();

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

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

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





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

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

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

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
// work with the book Element here
}

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

static private Node findFirstNamedElement(Node parent,String tagName)
{
NodeList children = parent.getChildNodes();
for (int i = 0, in = children.getLength() ; i Node child = children.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
if ( child.getNodeName().equals(tagName) )
return child;
}
return null;
}

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

static private String getCharacterData(Node parent)
{
StringBuilder text = new StringBuilder();
if ( parent == null )
return text.toString();
NodeList children = parent.getChildNodes();
for (int k = 0, kn = children.getLength() ; k Node child = children.item(k);
if ( child.getNodeType() != Node.TEXT_NODE )
break;
text.append(child.getNodeValue());
}
return text.toString();
}

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

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
ii++;
String id = book.getAttribute('id');
String author = getCharacterData(findFirstNamedElement(child,'author'));
String title = getCharacterData(findFirstNamedElement(child,'title'));
String genre = getCharacterData(findFirstNamedElement(child,'genre'));
String price = getCharacterData(findFirstNamedElement(child,'price'));
String pubdate = getCharacterData(findFirstNamedElement(child,'pubdate'));
String descr = getCharacterData(findFirstNamedElement(child,'description'));
System.out.printf('%3d. book id = %s
' +
' author: %s
' +
' title: %s
' +
' genre: %s
' +
' price: %s
' +
' pubdate: %s
' +
' descr: %s
',
ii, id, author, title, genre, price, pubdate, descr);
}

كتابة إخراج XML

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

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

id=bk113
author=Jane Austen
title=Pride and Prejudice
genre=Romance
price=6.99
publish_date=2010-04-01
description='It is a truth universally acknowledged, that a single man in possession of a good fortune must be in want of a wife.' So begins Pride and Prejudice, Jane Austen's witty comedy of manners-one of the most popular novels of all time-that features splendidly civilized sparring between the proud Mr. Darcy and the prejudiced Elizabeth Bennet as they play out their spirited courtship in a series of eighteenth-century drawing-room intrigues.

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

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

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

String propsFile = ...;
Properties props = new Properties();
try (FileReader in = new FileReader(propsFile)) {
props.load(in);
}

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

String id = props.getProperty('id');
String author = props.getProperty('author');
String title = props.getProperty('title');
String genre = props.getProperty('genre');
String price = props.getProperty('price');
String publish_date = props.getProperty('publish_date');
String descr = props.getProperty('description');

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

رمز البطارية لا يظهر على شريط المهام
Element book = document.createElement('book');
book.setAttribute('id', id);

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

List elnames =Arrays.asList('author', 'title', 'genre', 'price',
'publish_date', 'description');
for (String elname : elnames) {
Element el = document.createElement(elname);
Text text = document.createTextNode(props.getProperty(elname));
el.appendChild(text);
book.appendChild(el);
}
catalog.appendChild(book);

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

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

TransformerFactory tfact = TransformerFactory.newInstance();
Transformer tform = tfact.newTransformer();
tform.setOutputProperty(OutputKeys.INDENT, 'yes');
tform.setOutputProperty('{http://xml.apache.org/xslt}indent-amount', '3');

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

tform.transform(new DOMSource(document), new StreamResult(System.out));

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

tform.transform(new DOMSource(document), new StreamResult(new File('output.xml')));

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

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

يشارك يشارك سقسقة بريد الالكتروني مقارنة بين Canon و Nikon: ما هي ماركة الكاميرا الأفضل؟

Canon و Nikon هما أكبر اسمين في صناعة الكاميرات. ولكن ما هي العلامة التجارية التي تقدم أفضل تشكيلة من الكاميرات والعدسات؟

اقرأ التالي
مواضيع ذات صلة
  • برمجة
  • جافا
نبذة عن الكاتب جاي سريدهار(تم نشر 17 مقالة) المزيد من Jay Sridhar

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك