StAX Parser - ภาพรวม
StAX เป็น API ที่ใช้ JAVA เพื่อแยกวิเคราะห์เอกสาร XML ในลักษณะเดียวกับที่โปรแกรมแยกวิเคราะห์ SAX ทำ แต่มีสองประเด็นหลักที่แตกต่างระหว่าง API ทั้งสอง -
StAX เป็น PULL API ในขณะที่ SAX เป็น PUSH API หมายความว่าในกรณีของตัวแยกวิเคราะห์ StAX แอปพลิเคชันไคลเอนต์จำเป็นต้องขอให้ตัวแยกวิเคราะห์ StAX รับข้อมูลจาก XML เมื่อใดก็ตามที่ต้องการ แต่ในกรณีของตัวแยกวิเคราะห์ SAX แอปพลิเคชันไคลเอ็นต์จะต้องได้รับข้อมูลเมื่อตัวแยกวิเคราะห์ SAX แจ้งแอปพลิเคชันไคลเอนต์ว่าข้อมูล สามารถใช้ได้.
StAX API สามารถอ่านและเขียนเอกสาร XML ใช้ SAX API xml สามารถอ่านได้เท่านั้น
ต่อไปนี้เป็นคุณสมบัติของ StAX API -
อ่านเอกสาร XML จากบนลงล่างโดยรับรู้โทเค็นที่ประกอบเป็นเอกสาร XML ที่มีรูปแบบดี
โทเค็นจะถูกประมวลผลตามลำดับเดียวกับที่ปรากฏในเอกสาร
รายงานโปรแกรมแอปพลิเคชันเกี่ยวกับลักษณะของโทเค็นที่ตัวแยกวิเคราะห์พบเมื่อเกิดขึ้น
โปรแกรมแอปพลิเคชันมีโปรแกรมอ่าน "เหตุการณ์" ซึ่งทำหน้าที่เป็นตัววนซ้ำและวนซ้ำเหตุการณ์เพื่อรับข้อมูลที่ต้องการ เครื่องอ่านอื่นที่มีอยู่คือเครื่องอ่าน "เคอร์เซอร์" ซึ่งทำหน้าที่เป็นตัวชี้ไปยังโหนด xml
เนื่องจากเหตุการณ์ถูกระบุองค์ประกอบ xml สามารถดึงมาจากอ็อบเจ็กต์เหตุการณ์และสามารถประมวลผลเพิ่มเติมได้
ใช้เมื่อไหร่?
คุณควรใช้ตัวแยกวิเคราะห์ StAX เมื่อ -
คุณสามารถประมวลผลเอกสาร XML ในลักษณะเชิงเส้นจากบนลงล่าง
เอกสารไม่ซ้อนกันลึก
คุณกำลังประมวลผลเอกสาร XML ขนาดใหญ่ซึ่งโครงสร้าง DOM จะใช้หน่วยความจำมากเกินไป การใช้งาน DOM โดยทั่วไปจะใช้หน่วยความจำสิบไบต์เพื่อแทน XML หนึ่งไบต์
ปัญหาที่ต้องแก้ไขเกี่ยวข้องกับเอกสาร XML เพียงบางส่วนเท่านั้น
ข้อมูลจะพร้อมใช้งานทันทีที่ตัวแยกวิเคราะห์เห็นดังนั้น StAX จึงทำงานได้ดีสำหรับเอกสาร XML ที่มาถึงผ่านสตรีม
ข้อเสียของ SAX
เราไม่มีการเข้าถึงเอกสาร XML โดยสุ่มเนื่องจากมีการประมวลผลในลักษณะส่งต่อเท่านั้น
หากคุณต้องการติดตามข้อมูลที่ตัวแยกวิเคราะห์เห็นหรือเปลี่ยนลำดับของรายการคุณต้องเขียนโค้ดและจัดเก็บข้อมูลด้วยตัวคุณเอง
คลาส XMLEventReader
คลาสนี้จัดเตรียมตัววนซ้ำของเหตุการณ์ซึ่งสามารถใช้เพื่อวนซ้ำเหตุการณ์ที่เกิดขึ้นขณะแยกวิเคราะห์เอกสาร XML
StartElement asStartElement() - ใช้เพื่อดึงค่าและคุณลักษณะขององค์ประกอบ
EndElement asEndElement() - เรียกว่าเมื่อสิ้นสุดองค์ประกอบ
Characters asCharacters() - สามารถใช้เพื่อรับอักขระเช่น CDATA ช่องว่าง ฯลฯ
คลาส XMLEventWriter
อินเทอร์เฟซนี้ระบุวิธีการสร้างเหตุการณ์
add(Event event) - เพิ่มเหตุการณ์ที่มีองค์ประกอบใน XML
คลาส XMLStreamReader
คลาสนี้จัดเตรียมตัววนซ้ำของเหตุการณ์ซึ่งสามารถใช้เพื่อวนซ้ำเหตุการณ์ที่เกิดขึ้นขณะแยกวิเคราะห์เอกสาร XML
int next() - ใช้เพื่อดึงข้อมูลเหตุการณ์ต่อไป
boolean hasNext() - ใช้เพื่อตรวจสอบเหตุการณ์เพิ่มเติมว่ามีอยู่หรือไม่
String getText() - ใช้เพื่อรับข้อความขององค์ประกอบ
String getLocalName() - ใช้เพื่อรับชื่อขององค์ประกอบ
คลาส XMLStreamWriter
อินเทอร์เฟซนี้ระบุวิธีการสร้างเหตุการณ์
writeStartElement(String localName) - เพิ่มองค์ประกอบเริ่มต้นของชื่อที่กำหนด
writeEndElement(String localName) - เพิ่มองค์ประกอบท้ายของชื่อที่กำหนด
writeAttribute(String localName, String value) - เขียนแอตทริบิวต์ให้กับองค์ประกอบ