พี่กี้บอก sax ก็ sax (จริงๆแล้วใช้ dom ไม่เป็นด้วย :-P)
import sys from xml.sax import make_parser from xml.sax.handler import ContentHandler from xml.sax.saxutils import quoteattr class MyHandler(ContentHandler): def __init__(self): ContentHandler.__init__(self) def startDocument(self): print "<node>" self.level = 0 self.prev = None def endDocument(self): if self.prev != None: print self.prev + "/>" for i in range(self.level): print "</node>" print "</node>" def startElement(self, name, attrs): if len(attrs) > 0: level = int(attrs["level"]) if level <= self.level: if self.prev != None: print self.prev + "/>" for i in range(self.level - level): print "</node>" else: if self.prev != None: print self.prev + ">" if level > self.level + 1: for i in range(level - self.level - 1): print "<node>" self.prev = "<node" + \ " type=" + quoteattr(attrs['type']) + \ " name=" + quoteattr(attrs['name']) self.level = level def main(): parser = make_parser() handler = MyHandler() parser.setContentHandler(handler) parser.parse(sys.argv[1]) if __name__ == '__main__': main()
เขียนแล้วไม่ค่อยมั่นใจเลยว่าจะถูก
กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น
เสือปืนไว
เหมือนคิดผิดที่ใช้ SAX รู้สึกถึงความไม่งาม
ขอนอกเรื่องนิดนึง...
ถ้า Coding ด้วย Python ผมนึกไม่ออกเลยว่าทำไมควรจะใช้ XML
เรื่องของเรื่องคือรู้สึกว่าใช้ Dict น่าจะสะดวกกว่า
หรือ Dict มันจะสะดวกก็ต่อเมื่อ ข้่อมูลไม่ซับซ้อนมากเท่านั้นหรือปล่าวก็ไม่รู้นะ?
แต่ถ้าอะไรที่มันซับซ้อนในแบบที่ใช้ Dict แล้วไม่เหมาะ
ก็ไปใช้พวก DB เลยไม่ดีกว่าเหรอ?
หรือถ้าขี้เกียจคิดเรื่องการลง DB Engine อย่างตระกูล SQL
ก็ใช้ ZODB ไม่ก็ Durus ก็น่าจะได้ คล้ายๆ กัน
--*--
ในกรณีที่ต้อง Interface กับภาษาอื่น ใช้ JSON ก็น่าจะดีหรือปล่าว?
รู้สึกว่ามัน Match กับ Dict ของ Python ดี
คำถามคือคำตอบ
ถ้าโจทย์ไม่ได้ให้ xml มาแปลงเป็น xml ผมก็ไม่คิดจะใช้ xml ให้มึนหรอกครับ ส่วนใหญ่ถ้าใช้เองข้างในโปรแกรมส่วนตัวก็ไม่จำเป็นต้อง xml แต่เวลาคุยกับคนอื่น เค้าอยากได้ xml ก็ต้องหาให้เค้า
ผมทำงานกับพวก legacy system อยู่ พบว่ามันมีหลายๆ งานที่ใช้ XML ก็มีข้อดีอยู่เยอะครับ ประเด็นที่สำคัญมากๆ คือคนรองรับมันเยอะมาก และไม่น่าจะหายไปได้ง่ายๆ ในเร็วๆ นี้
JSON ก็มีจุดที่เหมาะสมกับมัน อย่างเช่นพวก AJAX นี่จะใช้กันเยอะ แต่ถ้าถามว่าพวก DB ทั้งหลายรองรับ JSON ไหมก็หายากอยู่ดี
ผมใช้เพราะ SAX นี่หละครับใช้ memory น้อยดี ไม่รู้ว่า library ของ Python ที่อ่่าน JSON มาทำ แบบ SAX หรือเปล่า? ถ้ามีจะได้ลองมาใช้บ้าง :-)