¹®¼ °´Ã¼ ¸ðµ¨(DOM)Àº XML ¹®¼¸¦ Æ®¸®±¸Á¶ Ç¥ÇöÀ¸·Î ¸í½ÃÇÑ´Ù. ÃÖ»óÀ§ ¹®¼ ÀνºÅϽº´Â Æ®¸®ÀÇ ·çÆ®À̸ç, ÇϳªÀÇ ÃÖ»óÀ§ ¿ä¼Ò ÀνºÅϽº(Element instance)¸¦ °®´Â´Ù.; ÀÌ ¿ä¼Ò´Â ³»¿ëÀ» Ç¥ÇöÇÏ´Â Àڽijëµå³ª, Ãß°¡ÀûÀÎ ÀÚ½ÄÀ» °®À» ¼ö ÀÖ´Â ÇÏÀ§¿ä¼Ò¸¦ °®´Â´Ù. ÇÔ¼öµéÀº °á°úÆ®¸®¸¦ Ž»öÇϰųª, ¿ä¼Ò¿Í ¼Ó¼º°ªÀ¸·ÎÀÇ Á¢±Ù, ³ëµåÀÇ Ãß°¡¿Í »èÁ¦, Æ®¸®¸¦ ´Ù½Ã XML ·Î º¯È¯ÇÏ´Â µîÀÇ ÀÛ¾÷µîÀ» Á¦°øÇÑ´Ù.
DOM Àº, DOM Æ®¸®¸¦ ¸¸µé¾î »õ·Î¿î ³ëµå¸¦ Ãß°¡Çϰųª ÇÏÀ§Æ®¸®¸¦ ¿Å±äÈÄ, »õ·Î¿î XML ¹®¼·Î °á°ú¸¦ Ãâ·ÂÇÒ¼öÀÖ°Ô ÇÔÀ¸·Î¼, XML ¹®¼ÀÇ ¼öÁ¤À» ½±°Ô ÇØÁØ´Ù. ¶ÇÇÑ ÀڽŸ¸ÀÇ DOM Æ®¸®¸¦ ¸¸µé°í, À̸¦ XML ·Î º¯È¯Çϴ°͵µ °¡´ÉÇÏ´Ù; ÀÌ ¹æ¹ýÀº ´Ü¼øÈ÷ ÆÄÀÏ¿¡ <tag1>...</tag1> ¸¦ ¾²´Â ¹æ¹ýº¸´Ù, XML À» »ý¼ºÇϴµ¥ ´õ¿í À¯¿¬ÇÑ ¹æ¹ýÀÌ´Ù.
DOM Àº ÇѽÃÁ¡¿¡¼ ¸ðµç Æ®¸®¸¦ ¸Þ¸ð¸®¿¡ »óÁÖ½Ã۴°ÍÀ» ¿ä±¸ÇÏÁö ¾Ê´Â ¹Ý¸é¿¡, ÆÄÀ̽ã DOM µµ±¸´Â RAM ¿¡ ¸ðµç Æ®¸®¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. Æ®¸®ÀÇ ´ëºÎºÐÀ» µð½ºÅ©³ª µ¥ÀÌÅͺ£À̽º¿¡ Áý¾î³Ö°í, ÇÊ¿äÇÑ ¼½¼Ç¸¸À» ÀоîµéÀÌ´Â ¹æ¹ýÀÌ °¡´ÉÇϰÚÁö¸¸, ÇöÀç·Î¼´Â Áö¿øµÇÁö ¾Ê´Â´Ù. ÀÌ´Â ¿ë·®ÀÌ Å« ¹®¼¸¦ DOM Æ®¸®·Î ó¸®ÇÒ¶§, ¸Þ¸ð¸®°¡ ºÎÁ·ÇÒ ¼öµµ ÀÖÀ½À» ³ªÅ¸³½´Ù. ¹Ý´ë·Î, SAX Çڵ鷯´Â °¡¿ëÇÑ RAM º¸´Ù Å« µ¥ÀÌÅ͸¦ ó¸®Çϴ°ÍÀÌ °¡´ÉÇÏ´Ù.
DOM Æ®¸®¸¦ ¾ò´Â °¡Àå ½¬¿î ¹æ¹ýÀº ÀÚ±âÀÚ½ÅÀÌ ¸¸µå´Â°ÍÀÌ´Ù. PyXML Àº DOM À» À§ÇÑ µµ±¸·Î¼ xml.dom.minidom °ú 4DOM À» Á¦°øÇÑ´Ù. xml.dom.minidom Àº ÆÄÀ̽ã 2.0 ¿¡ Æ÷ÇԵǾî ÀÖ´Ù. ÆÄÀ̽ã 2.0 ¿¡ Æ÷ÇԵǾî ÀÖ´Â xml.dom.minidom Àº ÃÖ¼ÒÇÑÀÇ µµ±¸·Î¼, DOM Ç¥ÁØ¿¡¼ ¿ä±¸ÇÏ´Â ¸ðµç ÀÎÅÍÆäÀ̽º¿Í ¿¬»êÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù. 4DOM (XXX reference) Àº DOM Level 2 ¿¡ Ãæ½ÇÇÑ µµ±¸À̹ǷÎ, À̹ø ¿¹Á¦¿¡´Â À̰ÍÀ» »ç¿ëÇϵµ·Ï ÇÑ´Ù.
xml.dom.package ³»ÀÇ ¸ðµâÁß xml.dom.ext.reader.Sax2 ´Â ÀÔ·Â(ÆÄÀÏ·ùÀÇ °´Ã¼, ½ºÆ®¸µ, ÆÄÀÏÀ̸§, URL µî)¿¡¼ DOM Æ®¸®¸¦ ¸¸µé¾îÁÖ´Â, FromXmlStream, FromXml, FromXmlFile, ±×¸®°í FromXmlUrl ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. À̵éÀº ¸ðµÎ DOM ¹®¼ °´Ã¼¸¦ ¹ÝȯÇÑ´Ù.
import sys from xml.dom.ext.reader.Sax import FromXmlStream from xml.dom.ext import PrettyPrint # parse the document doc = FromXmlStream(sys.stdin) |
DOM Àº ¼ö¸¹Àº ÀÎÅÍÆäÀ̽º¿Í ¸Þ½îµå¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î, ÀÌ HOWTO ¿¡¼ ±× ¸ðµç°ÍÀ» ¼³¸íÇÒ ¼ö´Â ¾ø´Ù. ±×·¯³ª, ´ÙÇེ·´°Ôµµ, DOM ±Ç°í¾ÈÀº ¸Å¿ì °¡µ¶¼ºÀÌ ³ôÀº ¹®¼À̹ǷÎ, °¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¿¡ ´ëÇÑ ¿ÏÀüÇÑ ±×¸²À» ¾ò±â À§ÇØ À̰ÍÀ» Àб⸦ ±ÇÇÑ´Ù. ¿©±â¼´Â ÀϺκÐÀÇ °³°ü¸¸À» º¸µµ·Ï ÇÑ´Ù.
¹®¼ °´Ã¼ ¸ðµ¨(DOM)Àº XML ¹®¼¸¦, ³ëµå Ŭ·¡½ºÀÇ ÇÏÀ§ Ŭ·¡½ºÀÇ ÀνºÅϽº·Î Ç¥ÇöµÇ´Â, ³ëµåµéÀÇ Æ®¸®·Î Ç¥ÇöÇÑ´Ù. ¾î¶°ÇÑ ³ëµåÀÇ ÇÏÀ§Å¬·¡½º´Â ¿ä¼Ò(Element), ÅØ½ºÆ®, ÁÖ¼®ÀÌ µÉ¼öµµ ÀÖ´Ù.
¿ì¸®´Â ÀÌ ¼½¼Ç³»¿¡¼ ÇϳªÀÇ °£´ÜÇÑ ¿¹Á¦¹®¼¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ¿©±â¿¡ ±× ¿¹Á¦°¡ ÀÖ´Ù.
<?xml version="1.0" encoding="iso-8859-1"?> <xbel> <?processing instruction?> <desc>No description</desc> <folder> <title>XML bookmarks</title> <bookmark href="http://www.python.org/sigs/xml-sig/" > <title>SIG for XML Processing in Python</title> </bookmark> </folder> </xbel> |
DOM Æ®¸®·Î º¯È¯Çϸé, ÀÌ ¹®¼´Â ´ÙÀ½°ú °°Àº Æ®¸®·Î Ãâ·ÂµÈ´Ù :
Element xbel None Text #text ' \012 ' ProcessingInstruction processing 'instruction' Text #text '\012 ' Element desc None Text #text 'No description' Text #text '\012 ' Element folder None Text #text '\012 ' Element title None Text #text 'XML bookmarks' Text #text '\012 ' Element bookmark None Text #text '\012 ' Element title None Text #text 'SIG for XML Processing in Python' Text #text '\012 ' Text #text '\012 ' Text #text '\012' |
À̰ÍÀº À¯ÀÏÇÏ°Ô °¡´ÉÇÑ Æ®¸®´Â ¾Æ´Ï´Ù. °¢±â ´Ù¸¥ ÆÄ¼µéÀÌ ¾î¶»°Ô ÅØ½ºÆ® ³ëµåµéÀ» ó¸®ÇÏ´À³Ä¿¡ µû¶ó ´Þ¶óÁú¼ö ÀÖ´Ù. À§ÀÇ Æ®¸®´Â ÅØ½ºÆ® ³ëµå¸¦ ¾î¶»°Ô ó¸®ÇÏ´À³Ä¿¡ µû¶ó ´ÙÁßÀÇ ³ëµå·Î ³ª´µ¾îÁú¼öµµ ÀÖ´Ù.
±âº»ÀûÀÎ ³ëµå Ŭ·¡½º¸¦ »ìÆìº¸±â·Î ÇÏÀÚ. ¸ðµç Document, Element, Text µîÀÇ ±âŸ DOM ³ëµåµéÀº ³ëµåÀÇ ¼ºê Ŭ·¡½ºÀÌ´Ù. ´ÜÁö ³ëµå°¡ Á¦°øÇÏ´Â ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ¸¹Àº ÀÛ¾÷À» Çϴ°ÍÀÌ °¡´ÉÇÏ´Ù.
XXX table of attributes and methods readonly attribute DOMString nodeName; attribute DOMString nodeValue; // raises(DOMException) on setting // raises(DOMException) on retrieval readonly attribute unsigned short nodeType; readonly attribute Node parentNode; readonly attribute NodeList childNodes; readonly attribute Node firstChild; readonly attribute Node lastChild; readonly attribute Node previousSibling; readonly attribute Node nextSibling; readonly attribute NamedNodeMap attributes; readonly attribute Document ownerDocument;
Node insertBefore(in Node newChild, in Node refChild) raises(DOMException); Node replaceChild(in Node newChild, in Node oldChild) raises(DOMException); Node removeChild(in Node oldChild) raises(DOMException); Node appendChild(in Node newChild) raises(DOMException); boolean hasChildNodes(); Node cloneNode(in boolean deep);
Àüü Æ®¸®ÀÇ ±âº»Àº µµÅ¥¸ÕÆ® ³ëµåÀ̸ç, µµÅ¥¸ÕÆ® ³ëµåÀÇ documentElement ¼Ó¼ºÀº ·çÆ® ¿ä¼Ò¿¡ ´ëÇÑ ¿ä¼Ò³ëµå(element node) ¸¦ Æ÷ÇÔÇÑ´Ù. µµÅ¥¸ÕÆ® ³ëµå´Â ProcessingInstruction ³ëµå¿Í °°Àº Ãß°¡ÀûÀÎ ÀÚ½ÄÀ» °¡Áú ¼ö ÀÖ´Ù.
the complete list of children XXX.
xml.dom.package ´Â Æ®¸®¸¦ Ž»ö(walk)ÇÏ´Â µîÀÇ ÀÛ¾÷¿¡ ´Ù¾çÇÑ µµ¿òÀ» Áִ Ŭ·¡½º¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.
The Walker class
Introduction to the walker class
Intro to builder
Intro to HTML builder
¿ùµå ¿ÍÀ̵å À¥ ÄÁ¼Ò½Ã¿òÀÇ DOM ÆäÀÌÁö
DOM Level 1 ±Ç°í¾È. ´ëºÎºÐÀÇ Ç¥Áذú ´Þ¸®, À̰ÍÀº ÄÚ¾î XML ÀÎÅÍÆäÀ̽º¿¡¸¸ °ü½ÉÀÌ ÀÖ´õ¶óµµ ÀÐÀ»¼öÀÖ°Ô µÇ¾îÀÖ´Ù.