SYSTEM & SOFTWARE LAB
¿¬±¸½Ç¼Ò°³ Áöµµ±³¼ö ³í¹®/ƯÇã/º¸°í¼­ ÇÁ·ÎÁ§Æ® ¼¼¹Ì³ª °­ÀÇ½Ç °Ô½ÃÆÇ ÀÚ·á½Ç °ü·Ã»çÀÌÆ®
 

°ø°³°­ÁÂ
¸ÖƼ¹Ìµð¾îÀÀ¿ë½Ã½ºÅÛ
ÀÓº£µðµåOS
¼ÒÇÁÆ®¿þ¾î°øÇÐ
ÀÇ·áÀ¶ÇÕÀÓº£µðµå½Ã½ºÅÛ




  [Æß] XML - SAX °ú DOM API »ç¿ë 2007-03-08 22:48:37  
  À̸§ : fastpopo ¹æÇѹΠ (210.115.¢½.¢½)  Á¶È¸ : 2105    
º» ÀÚ·á´Â http://www.javastudy.co.kr/ ¿¡¼­ ÆÛ¿Â±ÛÀÔ´Ï´Ù.

 ¹Ú Çü ÁØ [hjpark@shift.co.kr]
ÀÚ¹Ù½ºÅ͵ð ³×Æ®¿öÅ© [http://javastudy.co.kr]

 XMLÀÇ ¼Ò°³

Extensible Markup Language (XML)Àº À¥ ºê¶ó¿ìÁ®¸¦ ÅëÇØ ÇÑ ÆäÀÌÁöÀÇ ³»¿ë ¿ä¼ÒµéÀ» ±¸ºÐÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. XMLÀÇ ¹®¹ýÀº HTML°ú ºñ½ÁÇÕ´Ï´Ù. »ç½Ç, XMLÀº HTMLÀÌ ¾²ÀÌ´Â ¿©·¯ °÷¿¡¼­ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡¿¡ ¿¹°¡ ÀÖ½À´Ï´Ù. JDC Tech TipÀÇ ¸ñÂ÷°¡ HTMLÀÌ ¾Æ´Ï¶ó XML·Î ÀúÀåµÇ¾î ÀÖ´Ù°í °¡Á¤ÇսôÙ. ¾Æ·¡¿Í °°Àº HTML ÄÚµå ´ë½Å

<html>
<body>
<h1>JDC Tech Tip Index</h1>
<ol><li>
<a
href="http://developer.java.sun.com/developer/TechTips/2000/tt0509.html#tip1">
Random Access for Files
</a>
</li></ol>
</body>
</html>

¾Æ·¡¿Í °°ÀÌ ³ªÅ¸³³´Ï´Ù.

<?xml version="1.0" encoding="UTF-8"?>
<tips>
<author id="glen" fullName="Glen McCluskey"/>
<tip title="Random Access for Files"
     author="glen"
     htmlURL="http://developer.java.sun.com/developer/TechTips/2000/tt0509.html#tip1"
     textURL="http://developer.java.sun.com/developer/TechTips/txtarchive/May00_GlenM.txt">
</tip>
</tips>

XML°ú HTMLÀÇ ÄÚµå »çÀÌÀÇ À¯»ç¼ºÀ» º¸½Ê½Ã¿À. µÎ°¡Áö ¸ðµÎ ¹®¼­°¡ °èÃþÀû ¿¤¸®¸ÕÆ®·Î ±¸¼ºµÇ¾î ÀÖÀ¸¸ç, ¾ó·¹¸ÕÆ®´Â ²ªÀ½ °ýÈ£·Î ±¸ºÐµÇ¾î ÀÖ½À´Ï´Ù.HTML ¿¤¸®¸ÕÆ®°¡ °ÅÀÇ ±×·¸µíÀÌ, XML ¿¤¸®¸ÕÆ®´Â ½ÃÀÛ ÅÂ±×¿Í ±× µÚ¿¡ ³ªÅ¸³ª´Â µ¥ÀÌÅÍ, ±×¸®°í ³¡ ű׷Π±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.

<element>element data</element>

¿ª½Ã HTML°ú ¸¶Âù°¡Áö·Î, XML ¿¤¸®¸ÕÆ®´Â ¼Ó¼ºÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. À§ÀÇ XMLÀÇ ¿¹¿¡¼­, °¢ <tip> ¿¤¸®¸ÕÆ®´Â ¸î°³ÀÇ ¼Ó¼ºÀ» °®°í ÀÖ½À´Ï´Ù. 'title' ¼Ó¼ºÀº ÆÁÀÇ À̸§À» ³ªÅ¸³»¸ç, 'author' ¼Ó¼ºÀº ÀúÀÚÀÇ À̸§À» ³ªÅ¸³À´Ï´Ù. ±×¸®°í 'htmlURL'°ú 'textURL' ¼Ó¼ºÀº µÎ°¡ÁöÀÇ ´Ù¸¥ Çü½ÄÀ¸·Î ÀúÀåµÈ ÆÁÀÇ ¸µÅ©¸¦ ³ªÅ¸³À´Ï´Ù.

µÎ°³ÀÇ ¸¶Å©¾÷ ¾ð¾î »çÀÌÀÇ À¯»çÁ¡Àº HTML¿¡¼­ XML·Î ¿Å°Ü°¡´Âµ¥ ¾ÆÁÖ Áß¿äÇÑ ÀåÁ¡ÀÔ´Ï´Ù. ¾î·Æ°Ô ½ÀµæÇÑ HTML ±â¼úµéÀ» ±×´ë·Î ÀÌ¿ëÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. ±×·¯³ª, "¿Ö XML·Î ¹Ù²Ù¶ó°í ÇØ¼­ °í»ýÇÏ°Ô ¸¸µéÁö?"¶ó´Â Àǹ®ÀÌ µé°ÍÀÔ´Ï´Ù. ÀÌ Àǹ®¿¡ ´ëÇÑ ´ë´äÀ¸·Î, À§ÀÇ XML ¿¹¸¦ ´Ù½Ã Çѹø º¸½Ê½Ã¿À. ±×¸®°í ¹®¹ýÀûÀÎ Ãø¸éÀÌ ¾Æ´Ï¶ó ÀǹÌÀûÀÎ Ãø¸é¿¡¼­ »ìÆìº¸½Ê½Ã¿À. HTMLÀº ¹®¼­¸¦ ¾î¶»°Ô Çü½ÄÈ­ÇÏ´ÂÁö¸¦ ¸»ÇØÁÖÁö¸¸, XMLÀº ¹®¼­ÀÇ ³»¿ë¿¡ ´ëÇØ ¸»ÇØÁÝ´Ï´Ù. ÀÌ ´É·ÂÀº ¸Å¿ì °­·ÂÇÑ °ÍÀÔ´Ï´Ù. XML¿¡¼­, Ŭ¶óÀÌ¾ðÆ®´Â ±× µ¥ÀÌÅ͸¦ Àڽſ¡°Ô °¡Àå ÀûÇÕÇÑ Çü½ÄÀ¸·Î À籸¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ¼­¹ö°¡ Á¦°øÇÏ´Â Ãâ·Â ¾ç½Ä¿¡ ±¸¾Ö¹ÞÁö ¾Ê½À´Ï´Ù. Áß¿äÇѰÍÀº, XML Çü½ÄÀº °¡µ¶¼ºÀ» Èñ»ý½ÃŰÁö ¾ÊÀ¸¸é¼­µµ ÆÄ¼­ÀÇ ÆíÀǸ¦ À§ÇØ ¼³°èµÇ¾ú´Ù´Â °ÍÀÔ´Ï´Ù. XMLÀº ¹®¼­ÀÇ ±¸Á¶¿¡ ´ëÇØ ¹Ýµå½Ã ÁöÄÑ¾ß ÇÒ ¾à¼ÓÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¸î°¡Áö¸¦ º¸ÀÚ¸é, ½ÃÀÛ Å±״ ¾ðÁ¦³ª ³¡ ű׸¦ °¡Áö°í ÀÖ¾î¾ß Çϸç, ¿¤¸®¸ÕÆ®´Â Á¤È®È÷ ³»Æ÷°ü°è¸¦ °¡Á®¾ß Çϰí, ¸ðµç ¼Ó¼ºÀº °ªÀ» °¡Á®¾ß ÇÕ´Ï´Ù. ÀÌ·± ¾ö°ÝÇÔÀº XML ¹®¼­ÀÇ ÆÄ½Ì°ú º¯È¯À» HTMLÀÇ º¯È¯¿¡ ºñÇØ¼­ ³ôÀº ½Å·Ú¼ºÀ» °®°Ô ÇÕ´Ï´Ù.

XML°ú HTMLÀÇ À¯»ç¼ºÀº ±× ½ÃÀÛÀÌ °®±â ¶§¹®¿¡ »ý±é´Ï´Ù. HTMLÀº °­·ÂÇÑ ¸¶Å©¾÷ ¾ð¾îÀÎ SGMLÀ» °£·«È­ÇÑ °ÍÀÔ´Ï´Ù. SGMLÀº °³¹ßÀÚ°¡ ÀڽŸ¸ÀÇ ¾îÈÖ, Áï ¹®¹ý/ÅÂ±× µîÀ» ¸¸µé¾î³¾ ¼öµµ ÀÖ´Â, °ÅÀÇ ¹«¾ùÀ̵çÁö ÇÒ ¼ö ÀÖ´Â "ÁÖ¹æÀÇ ½ÌÅ©´ë"°°Àº ¸¶Å©¾÷ ¾ð¾îÀÔ´Ï´Ù. HTMLÀº ¹Ì¸® Á¤ÀÇµÈ ¾îÈÖ¸¦ °¡Áø, SGML¿¡ ´ëÇÑ ¾ÆÁÖ ÀÛÀº ºÎºÐÀÔ´Ï´Ù. µû¶ó¼­ HTMLÀº ´ë·« 1992³â °æ¿¡³ª ¾µ¸¸Çß´ø, Ç¥ÇöÀ» À§ÇÑ ¿ä¼ÒµéÀÔ´Ï´Ù. SGML°ú HTMLÀº ¸ðµÎ ¹®Á¦°¡ ÀÖ½À´Ï´Ù. SGMLÀº ¸ðµç°ÍÀ» ÇÕ´Ï´Ù. ±×·¡¼­ ¾ÆÁÖ º¹ÀâÇÕ´Ï´Ù. HTMLÀº °£´ÜÇÕ´Ï´Ù. ±×·¯³ª ÆÄ½Ì ±ÔÄ¢ÀÌ ¾û¼ºÇϰí, ¾îÈÖ´Â È®ÀåÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ¿¡ ºñÇØ XMLÀº SGMLÀ» ÇÕ¸®ÀûÀ¸·Î °£·«È­Çß½À´Ï´Ù. À̰ÍÀÇ ¸ñÀûÀº º¹ÀâÇÏÁö ¾ÊÀ¸¸é¼­µµ SGMLÀÇ Áß¿äÇÑ ¸ñÀûÀ» ¸ðµÎ Áö¿øÇÕ´Ï´Ù. SGMLÀÌ "ÁÖ¹æÀÇ ½ÌÅ©´ë"¶ó¸é XMLÀº "½ºÀ§½º ¾Æ¹Ì ³ªÀÌÇÁ-¸Æ°¡À̹öÄ®... -_-" ÀÔ´Ï´Ù.

ÀÌ·± ÀåÁ¡ ¶§¹®¿¡, XMLÀº ¸î°¡Áö ÀÀ¿ë ºÐ¾ß¿¡¼­´Â HTMLÀ» ´ëüÇÏ´Â°Í ÀÌ»óÀÇ ÀÏÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº SGMLÀ» ´ëüÇÒ ¼öµµ ÀÖÀ¸¸ç, SGMLÀÇ º¹À⼺ ¶§¹®¿¡ Àû¿ëÀÌ ºÒ°¡´ÉÇß´ø ºÐ¾ß¿¡ ´ëÇÑ »õ·Î¿î ¹æ¹ýÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. XMLÀ» ¾îµð¿¡ ¾µ °ÍÀÎÁö¿¡ °ü°è¾øÀÌ, ÇÁ·Î±×·¡¹Ö ¾ð¾î´Â ÀÚ¹Ù¸¦ ÀÌ¿ëÇÒ °ÍÀÔ´Ï´Ù. ÀÚ¹Ù ¾ð¾î´Â Simple API for XML (SAX)¿Í Document Object Model (DOM) ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇÏ¿© XML ¹®¼­¸¦ ÆÄ½ÌÇϱâ À§ÇÑ °í¼öÁØÀÇ µµ±¸¸¦ Á¦°øÇϱ⠶§¹®¿¡, XMLÀ» Á÷Á¢ ÆÄ½ÌÇϱâ À§ÇÑ ÀڽŸ¸ÀÇ Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. SAX¿Í DOM ÆÄ¼­´Â ´Ù¸¥ ¸î°¡Áö ¾ð¾î¿¡¼­µµ ±¸ÇöÇÑ Ç¥ÁØÀÔ´Ï´Ù. ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­, Java(tm) API for XML Parsing (JAXP)¸¦ ÀÌ¿ëÇØ¼­ ÀÌ·± ÆÄ¼­µéÀ» ÀνºÅϽºÈ­ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÌ ÆÁÀÇ Äڵ带 ½ÇÇàÇÏ·Á¸é, http://java.sun.com/xml/download.html¿¡¼­ JAXP¿Í SAX/DOM ÆÄ¼­¸¦ ´Ù¿î·Îµå ¹Þ¾Æ¾ß ÇÕ´Ï´Ù. ±×¸®°í http://www.megginson.com/SAX/Java¿¡¼­ SAX 2.0µµ ´Ù¿î·Îµå ¹Þ¾Æ¾ß ÇÕ´Ï´Ù. ±×¸®°í classpath¸¦ jaxp, ÆÄ¼­, ±×¸®°í sax2ÀÇ JAR ÆÄÀÏÀ» Æ÷ÇÔÇϵµ·Ï °íÄ¡´Â °ÍÀ» ÀØÁö ¸¶½Ê½Ã¿À.

¡¡


--------------------------------------------------------------------------------

¡¡

 SAX APIÀÇ ÀÌ¿ë

SAX API´Â XML ¹®¼­¸¦ ´Ù·ç±â À§ÇÑ Á÷·Â ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÕ´Ï´Ù. À̰ÍÀº XML-DEV ¸ÞÀϸµ ¸®½ºÆ®ÀÇ ¸â¹öµé¿¡ ÀÇÇØ ¼­·Î ´Ù¸¥ º¥´õµéÀÌ ±¸ÇöÇÒ ¼ö Àִ ǥÁØ ÀÎÅÍÆäÀ̽ºÀÇ ÁýÇÕÀ¸·Î °³¹ßµÇ¾ú½À´Ï´Ù. SAX ¸ðµ¨Àº ÆÄ¼­°¡ ¹®¼­¸¦ Àо°¡¸é¼­ ¸¶Å©¾÷À» ¸¸³ª¸é À̺¥Æ® Çڵ鷯¸¦ È£ÃâÇÏ´Â Çü½ÄÀ¸·Î ÆÄ½ÌÇϵµ·Ï ÇÕ´Ï´Ù. SAXÀÇ Ã¹¹øÂ° ±¸ÇöÀº 1998³â 5¿ù¿¡ ³ª¿Ô½À´Ï´Ù. ±×¸®°í SAX 2.0Àº 2000³â 5¿ù¿¡ ³ª¿Ô½À´Ï´Ù. (ÀÌ ÆÁ¿¡¼­ »ç¿ëµÈ ÄÚµåµéÀº SAX2¿ëÀÔ´Ï´Ù.)

¸¶Å©¾÷ ¹ß»ý¿¡ ´ëÇÑ ½ÅÈ£¸¦ À§ÇØ SAX2¸¦ »ç¿ëÇÒ ¶§ ÇÒ ÀÏÀº, ¸î°³ÀÇ ¸Þ¼Òµå¿Í ÀÎÅÍÆäÀ̽º¸¦ ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽ºµé¿¡¼­ ContentHandler ÀÎÅÍÆäÀ̽º°¡ °¡Àå Áß¿äÇÕ´Ï´Ù. À̰ÍÀº XML ¹®¼­¸¦ ÆÄ½ÌÇϱâ À§ÇÑ °¢°¢ÀÇ ´Ü°èµéÀ» À§ÇÑ ¸î°³ÀÇ ¸Þ¼Òµå¸¦ ¼±¾ðÇÕ´Ï´Ù. ¸¹Àº °æ¿ì, ÀÌ·± ¸Þ¼Òµå Áß¿¡¼­ ¸î°³¸¸ ÀÌ¿ëÇÏ°Ô µË´Ï´Ù. ¿¹¸¦ µé¾î, ¾Æ·¡ÀÇ ÄÚµå´Â ÇϳªÀÇ ContentHandler ¸Þ¼Òµå (startElement)¸¸À» ÀÌ¿ëÇϸç, À̰ÍÀ» ÀÌ¿ëÇÏ¿© XML Tech Tip ¸ñ·Ï¿¡¼­ HTML ÆäÀÌÁö¸¦ »ý¼ºÇÕ´Ï´Ù.

    import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.xml.parsers.*;
    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    /**
     * ÆÁÀÇ Á¦¸ñµéÀÇ ¸ñ·ÏÀ» º¸¿©ÁÖ°í ÀÌ¿¡ ´ëÇÑ HTML°ú text ¹öÁ¯ÀÇ ¹®¼­¿¡
     * ¿¬°áÇÏ´Â °£´ÜÇÑ HTML ÆäÀÌÁö¸¦ »ý¼ºÇÑ´Ù.
     */
    public class UseSAX2 extends DefaultHandler
    {
        StringBuffer htmlOut;

        public String toString()
        {
            if (htmlOut != null)
                return htmlOut.toString();
            return super.toString();   
        }
   
        public void startElement(String namespace, String localName, String qName, Attributes atts)
        {
            if (localName.equals("tip"))
            {
                String title = atts.getValue("title");
                String html = atts.getValue("htmlURL");
                String text = atts.getValue("textURL");
                htmlOut.append("<br>");
                htmlOut.append("<A HREF=");
                htmlOut.append(html);
                htmlOut.append(">HTML</A> <A HREF=");
                htmlOut.append(text);
                htmlOut.append(">TEXT</A> ");
                htmlOut.append(title);
            }
        }

        public void processWithSAX(String urlString) throws Exception
        {
            System.out.println("Processing URL " + urlString);
            htmlOut = new StringBuffer("<HTML><BODY><H1>JDC Tech Tips Archive</H1>");
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            ParserAdapter pa = new ParserAdapter(sp.getParser());
            pa.setContentHandler(this);
            pa.parse(urlString);
            htmlOut.append("</BODY></HTML>");
        }

        public static void main(String[] args)
        {
            try
            {
                UseSAX2 us = new UseSAX2();
                us.processWithSAX(args[0]);
                String output = us.toString();
                System.out.println("Saving result to " + args[1]);
                FileWriter fw = new FileWriter(args[1]);
                fw.write(output, 0, output.length());
                fw.flush();
            }
            catch (Throwable t)
            {
                t.printStackTrace();
            }
        }
    }

ÀÌ ÇÁ·Î±×·¥À» Å×½ºÆ®Çϱâ À§ÇØ, ÀÌ ÆÁÀÇ ¾ÕºÎºÐÀÇ XMLÀÇ ¼Ò°³¿¡ ÀÖ´Â XML ¹®¼­¸¦ ÀÌ¿ëÇϰųª, http://staff.develop.com/halloway/TechTips/TechTipArchive.xml¿¡ ÀÖ´Â Á¶±Ý ´õ ±ä ¹®¼­¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ¹ÞÀº XML ¹®¼­¸¦ ÄÄÇ»ÅÍÀÇ ·ÎÄà µð·ºÅ丮¿¡ TechtipArchive.xml·Î ÀúÀåÇϽʽÿÀ. ¾Æ·¡¿Í °°Àº ¸í·É¾î·Î HTML ¹®¼­¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

    java UseSAX2 file:TechTipArchive.xml SimpleList.html

±×¸®°í SimpleList.htmlÀ» À¥ºê¶ó¿ìÁ®¸¦ ÅëÇØ¼­ º¸°í, ÃÖ±Ù ÆÁÀÇ ÅØ½ºÆ® ¹öÁ¯°ú HTML ¹öÁ¯ÀÇ ¸µÅ©¸¦ µû¶ó°¡ º¸½Ê½Ã¿À. (½ÇÁ¦ ½Ã³ª¸®¿À´Â À§ÀÇ Äڵ带 Ŭ¶óÀ̾ðÆ®ÀÇ ºê¶ó¿ìÁ®³ª ¼­¹öÀÇ ¼­ºí¸´/jsp ¾È¿¡ ÇÕÃÄ ³Ö¾î¾ß ÇÒ°ÍÀÔ´Ï´Ù.)

À§ Äڵ忡´Â ¸î°¡Áö Èï¹Ì·Î¿î ºÎºÐÀÌ ÀÖ½À´Ï´Ù. ÆÄ¼­¸¦ »ý¼ºÇÏ´Â ºÎºÐÀ» º¸½Ê½Ã¿À.

    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser sp = spf.newSAXParser();

JAXP¿¡¼­, SAXParser Ŭ·¡½º´Â Á÷Á¢ »ý¼ºÇÏÁö ¾Ê°í, factory ¸Þ¼ÒµåÀÎ newSAXParser()¸¦ ÀÌ¿ëÇÕ´Ï´Ù. À̰ÍÀº ¼­·Î ´Ù¸£°Ô ±¸ÇöµÈ ÄÚµåµéÀÌ ¼Ò½ºÄÚµåÀÇ º¯°æ ¾øÀÌ ³¢¿ö³Ö±â°¡ °¡´ÉÇϵµ·Ï Çϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. factory´Â ÀÌ ¿Ü¿¡µµ namespaceÀÇ Áö¿ø, ÀÎÁõ µîÀÇ Çâ»óµÈ ÆÄ½Ì ¿ä¼ÒµéÀ» Áö¿øÇÕ´Ï´Ù.JAXP ÆÄ¼­ÀÇ ÀνºÅϽº¸¦ °¡Áø µÚ¿¡¶óµµ, ¾ÆÁ÷Àº ÆÄ½ÌÇÒ Áغñ°¡ µÇÁö ¾Ê¾Ò½À´Ï´Ù. ÇöÀçÀÇ JAXP ÆÄ¼­´Â SAX 1.0¸¸ Áö¿øÇÕ´Ï´Ù. SAX 2.0À» Áö¿øÇϵµ·Ï Çϱâ À§Çؼ­, ÆÄ¼­¸¦ ParserAdapter·Î °¨½Î¾ß ÇÕ´Ï´Ù.

    ParserAdapter pa = new ParserAdapter(sp.getParser());

ParserAdapter Ŭ·¡½º´Â SAX2 ´Ù¿î·ÎµåÀÇ ÀϺκÐÀ̸ç, Áö±Ý ÀÖ´Â SAX1 ÆÄ¼­¿¡ SAX2ÀÇ ±â´ÉÀ» Ãß°¡ÇÕ´Ï´Ù.

ContentHandler ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â ´ë½Å, UseSAX´Â DefaultHandler Ŭ·¡½º¸¦ »ó¼Ó¹Þ½À´Ï´Ù. DefaultHandler´Â ¸ðµç ContentHandlerÀÇ ¸Þ¼Òµå¿¡ ´ëÇØ ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â ºñ¾îÀÖ´Â ±¸ÇöÀ» Á¦°øÇÏ´Â ¾î´ðÅÍ Å¬·¡½ºÀÔ´Ï´Ù. µû¶ó¼­ ¿À¹ö¶óÀ̵å Çϰí½ÍÀº ¸Þ¼Òµå¸¸ ±¸ÇöÇÏ¸é µË´Ï´Ù.

startElement() ¸Þ¼Òµå°¡ ½ÇÁ¦ ÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù. ÇÁ·Î±×·¥Àº ÆÁÀ» Á¦¸ñ ¸ñ·ÏÀ» º¸¿©ÁÖ¸é µÇ±â ¶§¹®¿¡, <tip> ¿¤¸®¸ÕÆ®¸¸ ÀÖÀ¸¸é µÇ¸ç, <tips>, <author> ¿¤¸®¸ÕÆ®´Â ¹«½ÃÇÕ´Ï´Ù. startElement ¸Þ¼Òµå´Â ¿¤¸®¸ÕÆ®ÀÇ À̸§À» üũÇϰí ÇöÀç ¿¤¸®¸ÕÆ®°¡ <tip>ÀÏ ¶§¿¡¸¸ °è¼ÓÇØ¼­ ÀÛ¾÷À» ¼öÇàÇÕ´Ï´Ù. ¶Ç ÀÌ ¸Þ¼Òµå´Â ¿¤¸®¸ÕÆ®ÀÇ ¼Ó¼ºÀ» Attributes ·¹ÆÛ·±½º¸¦ ÅëÇØ Á¢±ÙÇϵµ·Ï ÇÕ´Ï´Ù. µû¶ó¼­ ÆÁÀÇ À̸§°ú name, htmlURL, textURLÀ» ÃßÃâÇÏ´Â °ÍÀÌ ½±½À´Ï´Ù.

ÀÌ ¿¹ÀÇ °á°ú´Â ÃÖ±ÙÀÇ Tech TipsÀÇ ¸ñ·ÏÀ» º¸¿©ÁÖ´Â HTML ¹®¼­ÀÔ´Ï´Ù. HTMLÀ» Á÷Á¢ ¸¸µé¾îµµ µË´Ï´Ù. ÇÏÁö¸¸ À̰ÍÀ» XML·Î Çϰí, SAX Äڵ带 ÀÛ¼ºÇϸé Ãß°¡ÀûÀÎ À¯¿¬¼ºÀ» Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¸¥ ´©±º°¡ Tech TipÀ» ³¯Â¥º°·Î, ÀúÀÚº°·Î Á¤·ÄÇϰųª ¸î°¡Áö Á¦¾à»çÇ×À» °¡Áö°í ÇÊÅ͸µÀ» ÇϰíÀÚ ÇÑ´Ù¸é, °¢°¢¿¡ ´ëÇÑ ÆÄ½Ì Äڵ带 ÀÌ¿ëÇÏ¿© ÇϳªÀÇ XML ¹®¼­¿¡¼­ ÇØ´ç ¹®¼­¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.

ºÒÇàÈ÷µµ, XML µ¥ÀÌÅͰ¡ º¹ÀâÇØÁü¿¡ µû¶ó, À§ÀÇ »ùÇõµ Á¡Á¡ ÄÚµùÇÏ°í ¼öÁ¤ÇϱⰡ ¾î·Á¿öÁý´Ï´Ù. À§ÀÇ ¿¹´Â µÎ°¡Áö ¹®Á¦¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ù¹øÂ°´Â, HTML ¹®¼­¸¦ »ý¼ºÇϱâ À§ÇÑ Äڵ尡 ´ÜÁö ¹®ÀÚ¿­À» Á¶ÀÛÇÏ´Â °Í »ÓÀ̰í, µû¶ó¼­ ¾îµò°¡¿¡ ÀÖÀ» '>', '/'¸¦ ³õÁö°Ô µÈ´Ù´Â °ÍÀÔ´Ï´Ù. µÎ¹øÂ°·Î, SAX API´Â ¸¹Àº °ÍÀ» ±â¾ïÇÏÁö ¸øÇÕ´Ï´Ù. Áï, ¾ÕÀÇ ¾îµò°¡¿¡ ÀÖ¾ú´ø ¿¤¸®¸ÕÆ®¸¦ ÂüÁ¶ÇϰíÀÚ ÇÑ´Ù¸é, ¾Õ¿¡¼­ ÆÄ½ÌÇÑ ¿¤¸®¸ÕÆ®¸¦ ÀúÀåÇϱâ À§ÇÑ ÀڽŸ¸ÀÇ state machineÀ» ¸¸µé¾î¾ß ÇÑ´Ù´Â ¶æÀÔ´Ï´Ù.

Document Object Model (DOM) API°¡ ÀÌ µÎ°¡Áö ¹®Á¦Á¡À» ÇØ°áÇÕ´Ï´Ù.

¡¡


--------------------------------------------------------------------------------

¡¡

DOM APIÀÇ ÀÌ¿ë

DOM API´Â SAX API¿Í´Â ¿ÏÀüÈ÷ ´Ù¸¥ ¹®¼­ ó¸® ¸ðµ¨À» ±â¹ÝÀ¸·Î Çϰí ÀÖ½À´Ï´Ù. (SAX¿Í °°ÀÌ) Çѹø¿¡ ¹®¼­ÀÇ ÇÑ ºÎºÐÀ» Àд ´ë½Å, DOM ÆÄ¼­´Â ¹®¼­ Àüü¸¦ ÀнÀ´Ï´Ù. ±×¸®°í ÀÐ°í ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¥ Äڵ带 ¸¸µé ¼ö ÀÖµµ·Ï ¹®¼­ Àüü¸¦ Æ®¸® ±¸Á¶·Î ¸¸µì´Ï´Ù. SAX¿Í DOMÀÇ Â÷ÀÌÁ¡À» °£´ÜÈ÷ ¸»ÇÏÀÚ¸é, ¼øÂ÷Àû/Àбâ Àü¿ë Á¢±Ù°ú ÀÓÀÇ/Àбâ/¾²±â Á¢±ÙÀÇ Â÷ÀÌÀÔ´Ï´Ù.

DOM APIÀÇ ÇÙ½ÉÀº Document¿Í Node ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. Document´Â XML ¹®¼­¸¦ ³ªÅ¸³»´Â ÃÖ»óÀ§ °´Ã¼ÀÔ´Ï´Ù. Document´Â µ¥ÀÌÅ͸¦ NodeÀÇ Æ®¸® ÇüÅ·ΠÀúÀåÇϰí ÀÖÀ¸¸ç, Node´Â element, attribute, ¶Ç´Â ´Ù¸¥ ÇüÅÂÀÇ ³»¿ë¹°À» ÀúÀåÇÏ´Â ±âº» ŸÀÔÀÔ´Ï´Ù. ¶Ç, Document´Â »õ·Î¿î Node¸¦ »ý¼ºÇϱâ À§ÇÑ factory·Îµµ µ¿ÀÛÇÕ´Ï´Ù. Node´Â Æ®¸®¿¡¼­ÀÇ ÇϳªÀÇ µ¥ÀÌÅ͸¦ Ç¥ÇöÇϸç, Æ®¸®¿¡ À־ÀÇ ÇÊ¿äÇÑ µ¿ÀÛÀ» Á¦°øÇÕ´Ï´Ù. ³ëµå¿¡ ´ëÇØ ±× ºÎ¸ð/ÇüÁ¦/ÀÚ½Ä ³ëµå¸¦ ãÀ» ¼ö ÀÖ½À´Ï´Ù. ¶Ç Node¸¦ Ãß°¡/»èÁ¦ÇÔÀ¸·Î½á ¹®¼­¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

DOM APIÀÇ ¿¹Á¦¸¦ º¸±â À§ÇØ, À§ÀÇ SAX¿¡¼­ º¸¿©Á³´ø XML ¹®¼­¸¦ ó¸®ÇØ º¾½Ã´Ù. À̹ø¿¡´Â ÀúÀÚº°·Î ¹­¾î¼­ Ãâ·ÂÇÕ´Ï´Ù. À̰ÍÀº ¸î°¡ÁöÀÇ ÀÛ¾÷À» ´õ ÇØ¾ß ÇÕ´Ï´Ù. ¾Æ·¡¿¡ Äڵ尡 ÀÖ½À´Ï´Ù.

    //UseDOM.java
    import java.io.*;
    import java.net.*;
    import java.util.*;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;

    public class UseDOM
    {
        private Document outputDoc;
        private Element body;
        private Element html;

        private HashMap authors = new HashMap ();
   
        public String toString ()
        {
            if (html != null)
            {
                return html.toString ();
            }
            return super.toString();
        }

        public void processWithDOM (String urlString)
            throws Exception
        {
            System.out.println ("Processing URL " + urlString);
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance ();
            DocumentBuilder db = dbf.newDocumentBuilder ();
            Document doc = db.parse (urlString);
            Element elem = doc.getDocumentElement ();
            NodeList nl = elem.getElementsByTagName ("author");
            for (int n=0; n<nl.getLength (); n++)
            {
                Element author = (Element)nl.item (n);
                String id = author.getAttribute ("id");
                String fullName = author.getAttribute ("fullName");
                Element h2 = outputDoc.createElement ("H2");
                body.appendChild (h2);
                h2.appendChild (outputDoc.createTextNode ("by " + fullName));
                Element list = outputDoc.createElement ("OL");
                body.appendChild (list);
                authors.put (id, list);
            }
            NodeList nlTips = elem.getElementsByTagName ("tip");
            for (int i=0; <nlTips.getLength (); i++)
            {
                Element tip = (Element)nlTips.item (i);
                String title = tip.getAttribute ("title");
                String htmlURL = tip.getAttribute ("htmlURL");
                String author = tip.getAttribute ("author");
                Node list = (Node) authors.get (author);
                Node item = list.appendChild (outputDoc.createElement ("LI"));
                Element a = outputDoc.createElement ("A");
                item.appendChild (a);
                a.appendChild(outputDoc.createTextNode (title));
                a.setAttribute ("HREF", htmlURL);
            }
        }

        public void createHTMLDoc (String heading)
            throws ParserConfigurationException 
        {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance ();
            DocumentBuilder db = dbf.newDocumentBuilder ();
            outputDoc = db.newDocument ();
            html = outputDoc.createElement ("HTML");
            outputDoc.appendChild (html);
            body = outputDoc.createElement ("BODY");
            html.appendChild (body);
            Element h1 = outputDoc.createElement ("H1");
            body.appendChild (h1);
            h1.appendChild (outputDoc.createTextNode (heading));
        }

        public static void main (String[] args)
        {
            try
            {
                UseDOM ud = new UseDOM ();
                ud.createHTMLDoc ("JDC Tech Tips Archive");
                ud.processWithDOM (args[0]);
                String htmlOut = ud.toString ();
                System.out.println ("Saving result to " + args[1]);
                FileWriter fw = new FileWriter (args[1]);
                fw.write (htmlOut, 0, htmlOut.length ());
                fw.flush ();
            }
            catch (Throwable t)
            {
                t.printStackTrace ();
            }
        }
    }

XMLÀ» TechTipArchive.xml·Î ÀúÀåÇß´Ù°í °¡Á¤ÇսôÙ. ¾Æ·¡¿Í °°Àº ¸í·É¾î·Î Äڵ带 ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

    java UseDOM file:TechTipArchive.xml ListByAuthor.html

±×¸®°í À¥ºê¶ó¿ìÁ®·Î ListByAuthor.htmlÀ» ¿­¾î¼­ ÀúÀÚº°·Î ±¸¼ºµÈ ÆÁÀÇ ¸ñ·ÏÀ» º¾´Ï´Ù.

Äڵ尡 µ¿ÀÛÇÏ´Â ¹æ¹ýÀ» ¾Ë±â À§ÇØ, createHTMLDoc ¸Þ¼ÒµåºÎÅÍ »ìÆìº¾½Ã´Ù. ÀÌ ¸Þ¼Òµå´Â outputDoc Document¸¦ »ý¼ºÇÕ´Ï´Ù. À̰ÍÀº ³ªÁß¿¡ HTML Ãâ·ÂÀ» ¸¸µå´Âµ¥ ÀÌ¿ëµË´Ï´Ù. SAX¿Í ¸¶Âù°¡Áö·Î, ÆÄ¼­´Â factory ¸Þ¼Òµå¸¦ ÅëÇØ »ý¼ºµË´Ï´Ù. ±×·¯³ª ¿©±â¼­´Â factory ¸Þ¼Òµå°¡ DocumentBuilderFactory Ŭ·¡½º¿¡ ÀÖ½À´Ï´Ù. createHTMLDocÀÇ ¾Æ·¡ÂÊ ¹ÝÀº HTMLÀÇ ±âº»ÀûÀÎ ¿ä¼ÒµéÀ» »ý¼ºÇÕ´Ï´Ù.

    outputDoc.appendChild (html);
    body = outputDoc.createElement ("BODY");
    html.appendChild (body);
    Element h1 = outputDoc.createElement ("H1");
    body.appendChild (h1);
    h1.appendChild (outputDoc.createTextNode (heading));

ÀÌ Äڵ带 SAX ¿¹Á¦¿¡ ÀÖ´Â HTMLÀÇ ¿ä¼Ò¸¦ »ý¼ºÇÏ´Â ÄÚµå¿Í ºñ±³ÇØ º¸½Ê½Ã¿À.

    //direct string manipulation from SAX example
    htmlOut = new StringBuffer ("<HTML><BODY><H1>JDC Tech Tips Archive</H1>");

DOM API¸¦ ÀÌ¿ëÇÏ¿© ¹®¼­¸¦ »ý¼ºÇÏ´Â °ÍÀº ¹®ÀÚ¿­À» Á÷Á¢ ´Ù·ç´Â °Í¸¸Å­ °£´ÜÇϰųª ºü¸£Áö ¾Ê½À´Ï´Ù. ±×·¯³ª (ƯÈ÷ Å« ¹®¼­¿¡ ´ëÇØ¼­) ¿¡·¯ÀÇ ¹ß»ýÀÌ Àû½À´Ï´Ù.

useDOM ¿¹Á¦¿¡¼­ °¡Àå Áß¿äÇÑ ºÎºÐÀº processWithDOM ¸Þ¼ÒµåÀÔ´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â µÎ°¡Áö ÀÏÀ» ÇÕ´Ï´Ù. (1) ÀúÀÚ ¿¤¸®¸ÕÆ®¸¦ ã°í À̰ÍÀ» Ãâ·ÂÀ¸·Î Á¦°øÇÕ´Ï´Ù. (2) ÆÁÀ» ã°í ÀúÀÚº°·Î ±¸ºÐÇÏ¿© Ãâ·ÂÀ¸·Î Á¦°øÇÕ´Ï´Ù. ÀÌ ´Ü°èµéÀº °¢°¢ ¹®¼­ÀÇ ÃÖ»óÀ§ ¿¤¸®¸ÕÆ®¿¡ Á¢±ÙÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù. À̰ÍÀº getDocumentElement () ¸Þ¼Òµå¸¦ ÅëÇØ ¼öÇàµË´Ï´Ù. ÀúÀÚ Á¤º¸´Â <author> ¿¤¸®¸ÕÆ®¿¡ µé¾îÀÖ½À´Ï´Ù. ÀÌ·± ¿¤¸®¸ÕÆ®´Â ÃÖ»óÀ§ ·¹º§¿¡¼­ getElementsByTagName ("author") ¸Þ¼Òµå¸¦ È£ÃâÇϸé ãÀ» ¼ö ÀÖ½À´Ï´Ù. getElementsByTagName ¸Þ¼Òµå´Â NodeList¸¦ ¸®ÅÏÇÕ´Ï´Ù. À̰ÍÀº °£´ÜÇÑ NodeÀÇ Ä÷º¼ÇÀÔ´Ï´Ù. ±×¸®°í °¢°¢ÀÇ Node´Â getAttribute ¸Þ¼Òµå¸¦ È£ÃâÇϱâ À§ÇØ Element·Î Çüº¯È¯µË´Ï´Ù. getAttribute ¸Þ¼Òµå´Â ÀúÀÚÀÇ ¾ÆÀ̵ð¿Í À̸§À» ÀÔ·ÂÀ¸·Î ¹Þ½À´Ï´Ù. °¢°¢ÀÇ ÀúÀÚ´Â 2¼öÁØÀÇ ¸Ó¸®¸»·Î ¸ñ·ÏÀÌ ¸¸µé¾îÁý´Ï´Ù. Ãâ·Â ¹®¼­´Â ÀúÀÚÀÇ À̸§À» ´ã°í ÀÖ´Â <H2> ¿ä¼Ò¸¦ »ý¼ºÇØ ³À´Ï´Ù. Node¸¦ Ãß°¡Çϱâ À§Çؼ­´Â 2°³ÀÇ ´Ü°è°¡ ÇÊ¿äÇÕ´Ï´Ù. ù¹øÂ°·Î Ãâ·Â ¹®¼­¿¡¼­ createElement¿Í °°Àº factory ¸Þ¼Òµå¸¦ ÅëÇØ Node¸¦ »ý¼ºÇÕ´Ï´Ù. ´ÙÀ½À¸·Î ³ëµå°¡ appendChild ¸Þ¼Òµå¸¦ ÅëÇØ Ãß°¡µË´Ï´Ù. ³ëµå´Â ÀÚ½ÅÀ» »ý¼ºÇÑ ¹®¼­¿¡¸¸ Ãß°¡µÉ ¼ö ÀÖ½À´Ï´Ù.

ÀúÀÚ ¸Ó¸®¸»ÀÌ Á¦ À§Ä¡¿¡ ³õÀÌ°Ô µÇ¸é, °¢°¢ÀÇ ÆÁ¿¡ ¸µÅ©¸¦ »ý¼ºÇÒ Â÷·ÊÀÔ´Ï´Ù. <tip> ¿ä¼Ò¸¦ <author> ¿¤¸®¸ÕÆ®¸¦ ãÀ»¶§¿Í °°Àº ¹æ¹ýÀ¸·Î getElementsByTagNameÀ» ÀÌ¿ëÇØ ã½À´Ï´Ù. ÆÁ ¼Ó¼ºÀ» ÃßÃâÇÏ´Â ¹æ¹ýµµ ºñ½ÁÇÕ´Ï´Ù. ÇѰ¡Áö Â÷ÀÌÁ¡Àº ³ëµå¸¦ ¾îµð¿¡ Ãß°¡ÇÒ °ÍÀΰ¡¸¦ °áÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀúÀÚ°¡ ´Ù¸£¸é ´Ù¸¥ ¸ñ·Ï¿¡ Ãß°¡µÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ ÀÛ¾÷À» À§ÇÑ ±âÃÊ ÀÛ¾÷À¸·Î ÀúÀÚ ¿¤¸®¸ÕÆ®¸¦ ó¸®ÇÒ ¶§¿¡ <OL> ³ëµå¸¦ Ãß°¡Çϰí ÀúÀÚÀÇ ¾ÆÀ̵ð·Î HashMap À妽ÌÀ» Çß½À´Ï´Ù. ÀÌÁ¦, ÆÁÀÇ ÀúÀÚ ¾ÆÀ̵ð ¼Ó¼ºÀ» ÆÁÀÌ Ãß°¡µÉ Àû´çÇÑ <OL> ³ëµå¸¦ ã´Âµ¥ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

XML¿¡ ´ëÇØ ´õ ±íÀÌ ´Ù·é ³»¿ëÀ» º¸½Ã·Á¸é, 2000³â¿¡ Addison-Wesley¿¡¼­ ÃâÆÇÇÑ Neil BradleyÀÇ The XML CompanionÀ» Âü°íÇϽʽÿÀ. JAXP¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â http://java.sun.com/xml/index.htmlÀÇ Java(tm) Technology¿Í XML ÆäÀÌÁö¸¦ Âü°íÇϽʽÿÀ. SAX2¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â http://www.megginson.com/SAX/index.htmlÀ» Âü°íÇϽʽÿÀ. DOM Ç¥ÁØÀº http://www.w3.org/TR/REC-DOM-Level-1¿¡ ÀÖ½À´Ï´Ù.



 
ÀÚµ¿µî·Ï¹æÁö : d2c47212df   ¿ÞÂÊÀÇ ±ÛÀÚÁß »¡°£±ÛÀÚ¸¸ ¼ø¼­´ë·Î ÀÔ·ÂÇϼ¼¿ä.

À̸ðƼÄÜ »ç¿ë 
¸ñ·Ï ±Û¾²±â
°Ô½Ã¹° 109°Ç  
No Title Name Date Hits
119   SIMD.. (2) jinnie4u ÀÌÁÂÇü 07-07-06 3514
118   Ajax ½±°Ô »ç¿ëÇØ º¾½Ã´Ù (2) byfun ¹ÚÃѸí 07-05-03 2406
117   GCC : Intel 386 and AMD x86-64 Options byfun ÃѸíÀÌ 04-05-19 12797
116   ¸®´ª½º¿¡ Çϵåµð½ºÅ© Ãß°¡Çϱâ byfun ¹ÚÃѸí 04-02-03 2759
115   Linux Network Install (using NFS/FTP/HTTP) byfun ¹ÚÃѸí 06-03-06 3930
114   [HW] RS232 Æ÷Æ® Á¦¾î ¿¹Á¦ (3) winhoho ±èµ¿Çõ 05-03-27 21378
113   [MFC] ´ÙÀ̾ó·Î±×(Dialog)À§¿¡ Åø¹Ù(ToolBar) ºÙÀ̱â (4) jinnie4u ÀÌÁÂÇü 06-06-25 8559
112   Á¦°¡ ¾´ ±ÛÀ» ¿­¾îº¼ ¼ö°¡ ¾ø³×¿ä... ÀÌÈﺹ 07-12-09 1657
  [Æß] XML - SAX °ú DOM API »ç¿ë fastpopo ¹æÇѹΠ07-03-08 2106
104   [Æß] JAVA RMI À» ÀÌ¿ëÇÏ¿© À̱âÁ¾ÀÇ DB¿¡ Á¢±ÙÇϱâ fastpopo ¹æÇѹΠ07-03-08 1869
103   java ¿¡¼­ byte ¹è¿­ 4°³¸¦ ¸ð¾Æ¼­ int ·Î º¯È¯ ÇÒ¶§!! fastpopo ¹æÇѹΠ07-01-30 2516
102   Visual Studio Project Renamer jinnie4u ÀÌÁÂÇü 06-10-23 4464
101   Inline functions (2) ÇÑ¿ì¶÷ 06-10-09 2495
100   ½ºÇÉ ÄÁÆ®·Ñ ÀÀ¿ë(up, down) | MFC jinnie4u ÀÌÁÂÇü 06-07-19 2897
95   [ÀÓ½Ã] µðÁöÅнýºÅÛ ½ÇÇè 4ÁÖÂ÷ 5ÁÖÂ÷ ½Ç½ÀÀÚ·á dkkim ±èµ¿±¹ 06-04-03 2008

±Û¾²±â
[óÀ½][ÀÌÀü][1] 2 [3][4][5]...[´ÙÀ½][¸Ç³¡]
 
Kangwon Univ. Dept. of Computer Imformation and Communications Engineering Software and System Lab.