DOM กับ SAX (XML Parser) ต่างกันอย่างไร

เรื่องนี้ผมหาข้อมูลอยู่นานพอสมควรเลย เพราะว่าไม่เคยรู้จักมันมาก่อน เรื่องราวมันเกิดขึ้นจากผมต้องการดึง Element & Attribute ของ XML ออกมา แต่ปัญหามันอยู่ที่ก่อนหน้านี้เคยทำแต่ XML ที่มีแต่ element มา ก็เลยยังไม่เจอปัญหาอะไร แต่คราวนี้มันมี attribute มาด้วย ก็เพิ่งพบว่า class ที่เคยใช้มันเอา attribute ของ XML มาไม่ได้ ก็เลยลองหาใหม่ หาไปหามาเริ่มเยอะ -*- จนในที่สุดก็ค้นพบ 2 keyword สำหรับ XML นี้ ก็คือ DOM และ SAX (อันที่จริงมันก็มีอีก แต่ผมพอจะเข้าใจแค่ 2 ตัวนี้ครับ แหะๆ)

ทีนี้มาดูกันครับว่าไอ้เจ้า DOM และ SAX นี้มันคืออะไร แล้วทำไมต้องตั้งชื่อให้มันด้วย แน่นอนล่ะครับว่ามันคือ XML Parser แต่มันแตกต่างกันยังไงล่ะ !!

DOM (Document Object Model) - อันนี้ web programmer หลายคนคงรู้จักกันแน่ๆ เพราะว่าคงจะได้เขียน HTML DOM กันอยู่บ่อยๆ คราวนี้ เรามาเจอมันใน XML ครับ มันก็ไม่ได้แตกต่างอะไรจาก HTML ครับ ก็คือ DOM จะมองแต่ละ Tag ที่แยกออกมาเป็น Object ครับ สร้างออกมาในลักษณะของต้นไม้ (Tree) ทำให้เวลาที่เราจะได้ Element ซักตัวของ Tag ด้านในก็ต้องใช้การท่องต้นไม้ลงไปครับ การที่จะทำแบบนี้ได้ เมื่อมีการรับ XML เข้ามาแล้ว DOM จะทำการสร้าง Tree แล้วไปจองพื้นที่ในหน่วยความจำครับ ทำให้เราเข้าถึงได้ง่ายครับ เค้าว่า DOM เขียนง่ายและเข้าใจง่ายกว่า SAX ครับ

SAX (Simple API for XML) - ตัวนี้จะเป็นการทำงานในลักษณะ event driven ครับ ลักษณะการทำงานจะเป็นการไล่ XML ไปเรื่อยๆ เมื่อเจอการเปิดหรือปิด Tag หรือเจอ attribute อะไรเหล่านี้ก็จะมีการ callback เป็น event กลับมา เพราะฉะนั้น programmer ต้องดักจับ event เหล่านี้เพื่อที่จะเอา element หรือ attribute ของแต่ละ tag

สรุปตามข้อมูลที่ได้ศึกษามานะครับ เค้าบอกกันว่า DOM เหมาะกับข้อมูลที่มีขนาดเล็ก ไม่ใหญ่มาก เพราะว่าถ้าใหญ่มันจะกินทรัพยากรของเครื่องสำหรับการสร้างต้นไม้ครับ สำหรับผมเมื่อรู้อย่างนี้แล้วก็เลยลองเริ่มศึกษาตั้งแต่ SAX เลย (DOM ใช้บ่อยใน HTML แล้ว) และเหตุผลอีกอย่างคือ Source Code ตัวอย่าง เข้าใจได้ง่ายกว่า สั้นกว่า ก็เลยลองๆดูครับ ใครที่กำลังหาข้อมูลเรื่องนี้อยู่ ยังไงก็แบ่งปันข้อมูลกันบ้างนะครับ ^^

XML Element



http://totheriver.com/learn/xml/xmltutorial.html
http://www.thaixml.com/faq/domsax.htm

Facebook Comment

Popular post of 7 days

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ