ניתוח קובץ 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 הוא ראשי תיבות של Model Object Document. בניגוד למנתח SAX, מנתח DOM טוען את קובץ ה- XML ​​השלם בזיכרון ויוצר מבנה עץ שבו כל צומת בעץ מייצג רכיב של קובץ XML. בעזרת מנתח DOM תוכלו ליצור צמתים, להסיר צמתים, לשנות את תוכנם ולחצות את היררכיית הצומת. DOM מספק גמישות מרבית בעבודה עם קבצי XML, אך זה כרוך בעלות של טביעת רגל זיכרון גדולה ודרישות מעבד משמעותיות במקרה של קבצי XML גדולים.

מנתח StAX - StAX הוא ראשי תיבות של Streaming API for XML. מנתחים מבוססי זרמים שימושיים מאוד כאשר ליישום שלך יש מגבלות זיכרון. לדוגמא, טלפון סלולרי שמריץ את Java Micro Edition. באופן דומה, אם היישום שלך צריך לעבד מספר בקשות בו זמנית, למשל שרת יישומים, יש להשתמש בניתוח StAX.

ניתן לסווג ניתוח מבוסס זרם כ:

משוך ניתוח - בניתוח משיכה, יישום לקוח קורא לשיטות בספריית ניתוח XML כאשר הוא זקוק לאינטראקציה עם infoset XML. במילים אחרות, הלקוח מקבל נתוני XML רק כאשר הוא מבקש זאת במפורש.



לחץ על ניתוח בניתוח דחיפה, מנתח ה- XML ​​הוא אשר דוחף את נתוני ה- XML ​​ללקוח כאשר הוא נתקל באלמנטים בתצורת XML. במילים אחרות, מנתח שולח את הנתונים ליישום ללא קשר ליישום שמוכן לשימוש בו או לא.

השוואה בין מנתח SAX, DOM ו- StAX:

הטבלה שלהלן מסכמת את התכונות של מנתח SAX, DOM ו- StAX

Java_bloge_2

כיצד לעצור תוכנית בג'אווה - -

עכשיו, כשאנחנו יודעים על המנתחים השונים, בואו נראה כיצד לנתח קובץ XML באמצעות מנתח SAX

קובץ XML
להלן קובץ ה- XML ​​שאנו הולכים לנתח ולבנות אובייקטים של Java

לתכנית לולאה בג'אווה
זהות בורן דאג לימן 119 מאט דיימון, פרנקה פוטנטה 2002 עליונות בורן פול גרינגראס 108 מאט דיימון, פרנקה פוטנטה, ג'ואן אלן 2004 האולטימטום של בורן פול גרינגראס 115 מאט דיימון, אדגר רמירז, ג'ואן אלן 2007 מורשת בורן טוני גילרוי 135 ג'רמי רנר , רייצ'ל וייס, אדוארד נורטון 2012

מבנה הפרויקט
הנה צילום המסך של מבנה הפרויקט ב- Eclipse IDE

הנה מחלקת ה- DVD המחזיקה רשימה של אובייקטים קולנועיים

חבילה co.edureka.parsers.sax ייבוא ​​java.util.List מחלקה ציבורית DVD {פרטי שם מחרוזת פרטי רשימה סרטים ציבורית מחרוזת getName () {return name} public void setName (שם מחרוזת) {this.name = name} ציבורי רשימה getMovies () {return films} public void setMovies (רשימת סרטים) {this.movies = films}}

לאובייקט הסרט יש מאפיינים כמו שם, במאים, זמן ריצה (משך זמן) של הסרט, שנת יציאה וצוות הסרט

חבילה co.edureka.parsers.sax מחלקה ציבורית סרט {פרטי שם מחרוזת פרטי במאי מחרוזות פרטי זמן ריצה פרטי int שוחרר פרטי מחרוזת צוות יצוק מחרוזת getName () {return name} public void setName (שם מחרוזת) {this.name = name} מחרוזת ציבורית getDirectors () {להחזיר במאים} set public ריק ריקנים (במאי מחרוזות) {this.directors = במאים} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {return released} public void setReleased (int שוחרר) {this.released = שוחרר} public מחרוזת getCast () {return cast} public public setCast (Cast cast) {this.cast = cast} @ Override Public String toString () { להחזיר 'סרט [name =' + name + ', במאים =' + במאים + ', runtime =' + runtime + ', שוחרר =' + שוחרר + ', cast =' + cast + ']'}}

יישום המטפל SAX:

אנו הולכים להרחיב את ה- org.xml.sax.helpers. מחלקת DefaultHandler המספקת שיטות החזרה רבות ותעקוף את השיטות הבאות:

startElement () - שיטה זו נקראת כאשר נתקלים בהתחלה של תג

endElement () - שיטה זו נקראת כאשר נתקלים בסוף התג

תווים() - שיטה זו מתקשרת כאשר נתקלים בנתוני טקסט מסוימים

הערה: ישנן שיטות החזרה רבות אחרות כגון startDocument (), endDocument () וכו 'שניתן לעקוף אם נדרש.

חבילה co.edureka.parsers.sax ייבוא ​​java.util.ArrayList ייבוא ​​java.util.List ייבוא ​​org.xml.sax.Attribute ייבוא ​​org.xml.sax.helpers.DefaultHandler מחלקה ציבורית SAXHandler מרחיב DefaultHandler {DVD dvd = DVD חדש ( ) ListmovieList = ArrayList חדש () סרט סרט = null תוכן מחרוזת = null ריק ריק startElement (String namespaceURI, String localName, String qname, Attribute attributes) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('name') dvd.setName (dvdName)} אחר אם (qname.equals ('movie')) {movie = new Movie ()}} public void endElement (String namespaceURI, String localName, String qname) {switch (qname ) {case 'movie': movieList.add (movie) break case 'name': movie.setName (content) break case 'במאים': movie.setDirectors (תוכן) case break 'שוחרר': movie.setReleased (Integer.parseInt (content)) break case 'runtime': movie.setRuntime (Integer.parseInt (content)) case case 'cast': movie.setCast (content) break case 'dvd': dvd.setMovies (movieList) break}} חלל ציבורי צ'ארה cters (char [] ch, int start, int length) {content = new String (ch, start, length)} DVD public getDVD () {return dvd}}

בדיקת SAX Handler
עכשיו בואו נבדוק את SAXHandler שלנו. להלן מחלקת הבדיקה SAXTest בה אנו מקבלים לראשונה מופע של SAXParser מ- SAXParserFactory וקוראים לשיטת הניתוח שלוקחת שני ארגומנטים: קובץ ומופע מטפל.

חבילה co.edureka.parsers.sax ייבוא ​​java.io.IOException ייבא java.nio.file.Path ייבוא ​​java.nio.file.Paths ייבוא ​​java.util.List ייבוא ​​javax.xml.parsers.ParserConfigurationException ייבא javax.xml.parsers .SAXParser ייבוא ​​javax.xml.parsers.SAXParserFactory ייבוא ​​org.xml.sax.SAXException מחלקה ציבורית SAXTest {ציבורי ריק ריק סטטי (מחרוזת [] args) זורק ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactor = SAXParserFactor = SAXParserFactor = parserFactor.newSAXParser () SAXHandler handler = SAXHandler new () Path path = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) רשימת סרטים = dvd.getMovies () System.out.println ('שם DVD:' + dvd.getName ()) עבור (סרט סרט: סרטים) {System.out.println (סרט)}}}

בעת ביצוע מחלקת SAXTest תקבל את הפלט שלהלן:

הערה : אם אתה מנסה לנתח קובץ XML עם מבנים שונים מ- films.xml, יש לשנות את הקוד בשיטות startElement () ו- endElement ().

אם אתה מעוניין לנסות את הקוד בעצמך הורד את הקוד
[buttonleads form_title = 'קוד הורדה' redirect_url = https: //edureka.wistia.com/medias/st5gg7rp15 course_id = 44 button_text = 'קוד הורדה']

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות ונחזור אליך.

פוסטים קשורים:

כיצד לעצור תוכנית בג'אווה - -