تحليل ملف XML باستخدام محلل SAX



توفر Java طرقًا عديدة لتحليل ملف XML مثل تحليل ملف XML باستخدام محلل DOM أو محلل SAX أو محلل StAX.

توفر Java طرقًا عديدة لتحليل ملف XML. على سبيل المثال ، تحليل ملف XML باستخدام محلل DOM أو محلل SAX أو محلل StAX. سنرى في هذا المنشور كيفية تحليل ملف XML باستخدام محلل SAX





قبل الدخول في التفاصيل حول كيفية تحليل ملفات XML باستخدام محلل SAX ، دعنا أولاً نرى الفرق بين التحليل من خلال موزعين مختلفين ومتى تختار واحدًا على الآخر.

محلل SAX - SAX هو اختصار لـ Simple API لـ XML. محلل SAX يوزع ملف XML سطرًا بسطر ويطلق الأحداث عندما يواجه علامة فتح أو علامة إغلاق أو بيانات شخصية في ملف XML. هذا هو السبب في أن محلل SAX يسمى محلل قائم على الحدث



محلل DOM - DOM هو اختصار لـ Document Object Model. على عكس محلل SAX اللغوي ، يقوم محلل DOM بتحميل ملف XML الكامل في الذاكرة وإنشاء هيكل شجرة حيث تمثل كل عقدة في الشجرة أحد مكونات ملف XML. باستخدام محلل DOM ، يمكنك إنشاء العقد ، وإزالة العقد ، وتغيير محتوياتها واجتياز التسلسل الهرمي للعقد. يوفر DOM أقصى قدر من المرونة أثناء العمل مع ملفات XML ولكنه يأتي مع تكلفة مساحة كبيرة للذاكرة ومتطلبات كبيرة للمعالج في حالة ملفات XML الكبيرة

محلل StAX - StAX هو اختصار لـ Streaming API لـ XML. المحللون القائمون على التدفق مفيد جدًا عندما يكون للتطبيق الخاص بك قيود على الذاكرة. على سبيل المثال ، هاتف محمول يعمل بنظام Java Micro Edition. وبالمثل ، إذا كان التطبيق الخاص بك يحتاج إلى معالجة عدة طلبات في وقت واحد ، على سبيل المثال خادم تطبيق ، فيجب استخدام محلل StAX.

يمكن تصنيف التحليل المعتمد على التدفق على النحو التالي:

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



دفع الاعراب - في تحليل الدفع ، يقوم محلل XML بدفع بيانات XML إلى العميل ، عندما يواجه عناصر في مجموعة معلومات XML. بمعنى آخر ، يرسل المحلل البيانات إلى التطبيق بغض النظر عن استعداد التطبيق لاستخدامه أم لا.

مقارنة بين محلل SAX و DOM و StAX:

يلخص الجدول أدناه ميزات محلل SAX و DOM و StAX

Java_bloge_2

الآن بعد أن عرفنا عن الموزعين المختلفين ، دعنا نرى كيفية تحليل ملف XML باستخدام محلل SAX

ما هو rmi في جافا

ملف XML
يوجد أدناه ملف XML الذي سنقوم بتحليل وإنشاء كائنات Java

The Bourne Identity Doug Liman 119 Matt Damon، Franka Potente 2002 The Bourne Supremacy Paul Greengrass 108 Matt Damon، Franka Potente، Joan Allen 2004 The Bourne Ultimatum Paul Greengrass 115 Matt Damon، Edgar Ramirez، Joan Allen 2007 The Bourne Legacy Tony Gilroy 135 Jeremy Renner ، راشيل وايز ، إدوارد نورتون 2012

هيكل المشروع
هذه لقطة شاشة لهيكل المشروع في Eclipse IDE

هنا فئة DVD التي تحتوي على قائمة بكائنات الفيلم

package co.edureka.parsers.sax import java.util.List public class DVD {private String name private List movies public String getName () {return name} public void setName (String name) {this.name = name} public List getMovies () {return movies} public void setMovies (قائمة الأفلام) {this.movies = movies}}

كائن الفيلم له خصائص مثل الاسم والمخرجين ووقت التشغيل (المدة) للفيلم وسنة الإصدار وطاقم الفيلم

package co.edureka.parsers.sax فئة عامة فيلم {اسم سلسلة خاص مدراء سلسلة خاصون وقت تشغيل خاص تم إصداره خاص String cast عام getName () {return name} public void setName (اسم السلسلة) {this.name = name} public String getDirectors () {return directors} public void setDirectors (String Directors) {this.directors = directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {return release} public void setReleased (int release) {this.released = release} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast}Override public String toString () { إرجاع 'فيلم [name =' + name + '، مخرجون =' + مخرجون + '، وقت التشغيل =' + وقت التشغيل + '، تم إصداره =' + تم إصداره + '، فريق التمثيل =' + cast + ']'}}

تنفيذ معالج SAX:

سنقوم بتوسيع org.xml.sax.helpers. فئة DefaultHandler التي توفر العديد من طرق رد الاتصال وستتجاوز الطرق التالية:

startElement () - يتم استدعاء هذه الطريقة عند اكتشاف بداية العلامة

endElement () - يتم استدعاء هذه الطريقة عند مصادفة نهاية العلامة

الشخصيات() - يتم استدعاء هذه الطريقة عند مصادفة بعض البيانات النصية

ملاحظة: هناك العديد من طرق رد الاتصال الأخرى مثل startDocument () و endDocument () وما إلى ذلك والتي يمكن تجاوزها إذا لزم الأمر.

package co.edureka.parsers.sax import java.util.ArrayList import java.util.List import org.xml.sax.Attributes import org.xml.sax.helpers.DefaultHandler public class SAXHandler توسع DefaultHandler {DVD dvd = new DVD ( ) ListmovieList = new ArrayList () Movie movie = null محتوى السلسلة = فارغ عام فارغ startElement (String namespaceURI ، String localName ، String qname ، Attributes attributes) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('name') dvd.setName (dvdName)} وإلا إذا (qname.equals ('movie')) {movie = new Movie ()}} endElement عام باطل (String namespaceURI ، String localName ، String qname) {switch (qname ) {case 'movie': movieList.add (movie) كسر الحالة 'name': movie.setName (content) كسر حالة 'المخرجين': movie.setDirectors (content) كسر الحالة 'تم إصدارها': movie.setReleased (Integer.parseInt (المحتوى)) كسر الحالة 'runtime': movie.setRuntime (Integer.parseInt (content)) كسر حالة 'cast': movie.setCast (محتوى) كسر حالة 'dvd': dvd.setMovies (movieList) break}} فراغ عام شارا cters (char [] ch، int start، int length) {content = new String (ch، start، length)} DVD getDVD () {return dvd}}

اختبار معالج SAX
الآن دعونا نختبر أداة SAXHandler الخاصة بنا. يوجد أدناه فئة الاختبار SAXTest حيث نحصل أولاً على مثيل SAXParser من SAXParserFactory واستدعاء طريقة التحليل التي تأخذ وسيطتين: ملف ومثيل معالج.

صفيف الفرز c ++ بترتيب تصاعدي
package co.edureka.parsers.sax import java.io.IOException import java.nio.file.Path import java.nio.file.Paths import java.util.List import javax.xml.parsers.ParserConfigurationException استيراد javax.xml.parsers .SAXParser import javax.xml.parsers.SAXParserFactory import org.xml.sax.SAXException public class SAXTest {public static void main (String [] args) يطرح ParserConfigurationException و SAXException و IOException {SAXParserFactory parserFacter = SAXParserFactory parserFacter = SAXParserFactory parserFacter = parserFactor.newSAXParser () SAXHandler handler = new SAXHandler () Path path = Paths.get ('src / resources'، 'movies.xml') parser.parse (path.toFile ()، handler) DVD dvd = handler.getDVD ( ) قائمة الأفلام = dvd.getMovies () System.out.println ('DVD Name:' + dvd.getName ()) لـ (فيلم فيلم: أفلام) {System.out.println (فيلم)}}}

عند تنفيذ فئة SAXTest ، ستحصل على المخرجات التالية:

ملحوظة : إذا كنت تحاول تحليل ملف XML بهياكل مختلفة من movies.xml ، فيجب تغيير الكود الموجود في التابعين startElement () و endElement ().

إذا كنت مهتمًا بتجربة الكود بنفسك ، فقم بتنزيل الكود
[buttonleads form_title = 'Download Code' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = 'تنزيل الرمز']

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات وسنعاود الاتصال بك.

المنشورات ذات الصلة: