การแยกไฟล์ XML โดยใช้ SAX Parser



Java มีหลายวิธีในการแยกวิเคราะห์ไฟล์ XML เช่นการแยกวิเคราะห์ไฟล์ XML โดยใช้ DOM parser, SAX parser หรือ StAX parser

Java มีหลายวิธีในการแยกวิเคราะห์ไฟล์ XML ตัวอย่างเช่นการแยกวิเคราะห์ไฟล์ XML โดยใช้ DOM parser, SAX parser หรือ StAX parser ในโพสต์นี้เราจะดูวิธีแยกวิเคราะห์ไฟล์ XML โดยใช้ SAX parser





คำแนะนำง่ายๆเกี่ยวกับวิทยาศาสตร์ข้อมูล

ก่อนที่จะดูรายละเอียดเกี่ยวกับวิธีแยกวิเคราะห์ไฟล์ XML โดยใช้โปรแกรมแยกวิเคราะห์ SAX ก่อนอื่นเรามาดูกันว่าอะไรคือความแตกต่างระหว่างการแยกวิเคราะห์ผ่านตัวแยกวิเคราะห์ที่แตกต่างกันและเวลาที่ควรเลือกใช้กับอีกไฟล์หนึ่ง

SAX Parser - SAX เป็นคำย่อของ Simple API สำหรับ XML SAX Parser จะแยกวิเคราะห์ไฟล์ XML ทีละบรรทัดและทริกเกอร์เหตุการณ์เมื่อพบแท็กเปิดแท็กปิดหรือข้อมูลอักขระในไฟล์ XML นี่คือสาเหตุที่ SAX parser เรียกว่าตัวแยกวิเคราะห์ตามเหตุการณ์



DOM Parser - DOM เป็นคำย่อของ Document Object Model ไม่เหมือนกับตัวแยกวิเคราะห์ SAX ตัวแยกวิเคราะห์ DOM จะโหลดไฟล์ XML ที่สมบูรณ์ลงในหน่วยความจำและสร้างโครงสร้างทรีโดยแต่ละโหนดในทรีจะแสดงส่วนประกอบของไฟล์ XML ด้วยตัวแยกวิเคราะห์ DOM คุณสามารถสร้างโหนดลบโหนดเปลี่ยนเนื้อหาและสำรวจลำดับชั้นของโหนดได้ DOM ให้ความยืดหยุ่นสูงสุดในขณะที่ทำงานกับไฟล์ XML แต่มาพร้อมกับต้นทุนของหน่วยความจำขนาดใหญ่ที่อาจเกิดขึ้นและความต้องการตัวประมวลผลที่สำคัญในกรณีของไฟล์ XML ขนาดใหญ่

StAX Parser - StAX เป็นคำย่อของ Streaming API สำหรับ XML ตัวแยกวิเคราะห์แบบสตรีมมีประโยชน์มากเมื่อแอปพลิเคชันของคุณมีข้อ จำกัด ด้านหน่วยความจำ ตัวอย่างเช่นโทรศัพท์มือถือที่ใช้ Java Micro Edition ในทำนองเดียวกันหากแอปพลิเคชันของคุณต้องการประมวลผลคำขอหลายรายการพร้อมกันเช่นแอปพลิเคชันเซิร์ฟเวอร์ควรใช้ตัวแยกวิเคราะห์ StAX

การแยกวิเคราะห์ตามสตรีมสามารถจำแนกได้เพิ่มเติมเป็น:

ดึงการแยกวิเคราะห์ - ในการแยกวิเคราะห์แบบดึงแอปพลิเคชันไคลเอนต์จะเรียกใช้เมธอดบนไลบรารีการแยกวิเคราะห์ XML เมื่อต้องการโต้ตอบกับชุดข้อมูล XML กล่าวอีกนัยหนึ่งไคลเอนต์จะได้รับข้อมูล XML เมื่อขออย่างชัดเจนเท่านั้น



ผลักดันการแยกวิเคราะห์ - ในการแยกวิเคราะห์แบบพุชเป็นตัวแยกวิเคราะห์ XML ที่พุชข้อมูล XML ไปยังไคลเอนต์เมื่อพบองค์ประกอบในชุดข้อมูล XML กล่าวอีกนัยหนึ่งคือ parser จะส่งข้อมูลไปยังแอปพลิเคชันโดยไม่คำนึงว่าแอปพลิเคชันนั้นพร้อมใช้งานหรือไม่

การเปรียบเทียบระหว่าง SAX, DOM และ StAX parser:

ตารางด้านล่างสรุปคุณสมบัติของตัวแยกวิเคราะห์ SAX, DOM และ StAX

Java_bloge_2

เมื่อเราทราบเกี่ยวกับตัวแยกวิเคราะห์ต่างๆแล้วเรามาดูวิธีแยกวิเคราะห์ไฟล์ XML โดยใช้โปรแกรมแยกวิเคราะห์ SAX

ไฟล์ 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 , Rachel Weisz, Edward Norton 2012

โครงสร้างโครงการ
นี่คือภาพหน้าจอของโครงสร้างโครงการใน Eclipse IDE

นี่คือคลาสดีวีดีที่มีรายการวัตถุภาพยนตร์

.format ทำอะไรใน python
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 () {คืนภาพยนตร์} โมฆะสาธารณะ setMovies (แสดงรายการภาพยนตร์) {this.movies = movies}}

ออบเจ็กต์ภาพยนตร์มีคุณสมบัติเช่นชื่อผู้กำกับรันไทม์ (ระยะเวลา) ของภาพยนตร์ปีที่เผยแพร่และนักแสดงของภาพยนตร์

package co.edureka.parsers.sax public class Movie {private String name private String director private int runtime private int release private String cast public String getName () {return name} public void setName (String name) {this.name = name} สาธารณะ String getDirectors () {return director} public void setDirectors (String director) {this.directors = Directors} public int getRuntime () {return runtime} public void setRuntime (int runtime) {this.runtime = runtime} public int getReleased ( ) {return Released} public void setReleased (int release) {this.released = released} public String getCast () {return cast} public void setCast (String cast) {this.cast = cast} @Override public String toString () { ส่งคืน 'Movie [name =' + name + ', director =' + director + ', runtime =' + runtime + ', release =' + released + ', cast =' + cast + ']'}}

การติดตั้ง SAX Handler:

เราจะขยาย 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 String content = null public void startElement (String namespaceURI, String localName, String qname, Attributes attributes) {if (qname.equals ('dvd')) {String dvdName = attributes.getValue ('name') dvd.setName (dvdName)} else if (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 'Directors': movie.setDirectors (content) break case 'Released': movie.setReleased (Integer.parseInt (content)) break case 'runtime': movie.setRuntime (Integer.parseInt (content)) break case 'cast': movie.setCast (content) break case 'dvd': dvd.setMovies (movieList) break}} โมฆะสาธารณะ chara cters (char [] ch, int start, int length) {content = new String (ch, start, length)} DVD สาธารณะ getDVD () {return dvd}}

การทดสอบ SAX Handler
ตอนนี้มาทดสอบ SAXHandler ของเรากัน ด้านล่างนี้คือคลาสทดสอบ SAXTest ที่เราได้รับอินสแตนซ์ของ SAXParser จาก SAXParserFactory เป็นครั้งแรกและเรียกใช้เมธอดการแยกวิเคราะห์ซึ่งรับอาร์กิวเมนต์สองตัว: A File และ handler

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 import javax.xml.parsers การนำเข้า. SAXParser javax.xml.parsers.SAXParserFactory นำเข้า org.xml.sax.SAXException คลาสสาธารณะ SAXTest {public static void main (String [] args) พ่น ParserConfigurationException, SAXException, IOException {SAXParserFactory parserFactor = SAXParserFactory (SAXParserFactory) parserFactor.newSAXParser () ตัวจัดการ SAXHandler = SAXHandler ใหม่ () พา ธ พา ธ = Paths.get ('src / resources', 'movies.xml') parser.parse (path.toFile (), handler) DVD dvd = handler.getDVD ( ) แสดงรายการภาพยนตร์ = dvd.getMovies () System.out.println ('ชื่อดีวีดี:' + 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 =” Download Code”]

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป

กระทู้ที่เกี่ยวข้อง: