SAX¸ÅÄî
SAXÊÇSimple API for XMLµÄËõд£¬Ëü²¢²»ÊÇÓÉW3C¹Ù·½ËùÌá³öµÄ±ê×¼£¬¿ÉÒÔ˵ÊÇ¡°Ãñ¼ä¡±µÄÊÂʵ±ê×¼¡£Êµ¼ÊÉÏ£¬ËüÊÇÒ»ÖÖÉçÇøÐÔÖʵÄÌÖÂÛ²úÎï¡£ËäÈ»Èç´Ë£¬ÔÚXMLÖжÔSAXµÄÓ¦ÓÃË¿ºÁ²»±ÈDOMÉÙ£¬¼¸ºõËùÓеÄXML½âÎöÆ÷¶¼»áÖ§³ÖËü¡£
ÓëDOM±È½Ï¶øÑÔ£¬SAXÊÇÒ»ÖÖÇáÁ¿Ð͵ķ½·¨¡£ÎÒÃÇÖªµÀ£¬ÔÚ´¦ÀíDOMµÄʱºò£¬ÎÒÃÇÐèÒª¶ÁÈëÕû¸öµÄXMLÎĵµ£¬È»ºóÔÚÄÚ´æÖд´½¨DOMÊ÷£¬Éý³ÉDOMÊ÷ÉϵÄÿ¸öNode¶ÔÏó¡£µ±Îĵµ±È½ÏСµÄʱºò£¬Õâ²»»áÔì³ÉʲôÎÊÌ⣬µ«ÊÇÒ»µ©Îĵµ´óÆðÀ´£¬´¦ÀíDOM¾Í»á±äµÃÏ൱·Ñʱ·ÑÁ¦¡£ÌرðÊÇÆä¶ÔÓÚÄÚ´æµÄÐèÇó£¬Ò²½«Êdzɱ¶µÄÔö³¤£¬ÒÔÖÁÓÚÔÚijЩӦÓÃÖÐʹÓÃDOMÊÇÒ»¼þºÜ²»»®ËãµÄÊ£¨±ÈÈçÔÚappletÖУ©¡£Õâʱºò£¬Ò»¸ö½ÏºÃµÄÌæ´ú½â¾ö·½·¨¾ÍÊÇSAX¡£
SAXÔÚ¸ÅÄîÉÏÓëDOMÍêÈ«²»Í¬¡£Ê×ÏÈ£¬²»Í¬ÓÚDOMµÄÎĵµÇý¶¯£¬ËüÊÇʼþÇý¶¯µÄ£¬Ò²¾ÍÊÇ˵£¬Ëü²¢²»ÐèÒª¶ÁÈëÕû¸öÎĵµ£¬¶øÎĵµµÄ¶ÁÈë¹ý³ÌÒ²¾ÍÊÇSAXµÄ½âÎö¹ý³Ì¡£ËùνʼþÇý¶¯£¬ÊÇÖ¸Ò»ÖÖ»ùÓڻص÷£¨callback£©»úÖÆµÄ³ÌÐòÔËÐз½·¨¡££¨Èç¹ûÄã¶ÔJavaÐŵĴúÀíʼþÄ£ÐͱȽÏÇå³þµÄ»°£¬¾Í»áºÜÈÝÒ×Àí½âÕâÖÖ»úÖÆÁË£©
ÔÚXMLReader½ÓÊÜXMLÎĵµ£¬ÔÚ¶ÁÈëXMLÎĵµµÄ¹ý³ÌÖоͽøÐнâÎö£¬Ò²¾ÍÊÇ˵¶ÁÈëÎĵµµÄ¹ý³ÌºÍ½âÎöµÄ¹ý³ÌÊÇͬʱ½øÐеģ¬ÕâºÍDOMÇø±ðºÜ´ó¡£½âÎö¿ªÊ¼Ö®Ç°£¬ÐèÒªÏòXMLReader×¢²áÒ»¸öContentHandler£¬Ò²¾ÍÊÇÏ൱ÓÚÒ»¸öʼþ¼àÌýÆ÷£¬ÔÚContentHandlerÖж¨ÒåÁ˺ܶ෽·¨£¬±ÈÈçstartDocument()£¬Ëü¶¨ÖÆÁ˵±ÔÚ½âÎö¹ý³ÌÖУ¬Óöµ½Îĵµ¿ªÊ¼Ê±Ó¦¸Ã´¦ÀíµÄÊÂÇé¡£µ±XMLReader¶Áµ½ºÍÊʵÄÄÚÈÝ£¬¾Í»áÅ׳öÏàÓ¦µÄʼþ£¬²¢°ÑÕâ¸öʼþµÄ´¦ÀíȨ´úÀí¸øContentHandler£¬µ÷ÓÃÆäÏàÓ¦µÄ·½·¨½øÐÐÏìÓ¦¡£
ÕâÑù·º·ºµÄ˵À´»òÐíÓÐЩ²»ÈÝÒ×Àí½â£¬±ð¼±£¬ºóÃæµÄÀý×Ó»áÈÃÄãÃ÷°×SAXµÄ½âÎö¹ý³Ì¡£¿´¿´Õâ¸ö¼òµ¥XMLÎļþ£º
<POEM>
<AUTHOR>Ogden Nash</AUTHOR>
<TITLE>Fleas</TITLE>
<LINE>Adam</LINE>
</POEM>
µ±XMLReader¶Áµ½<POEM>±êǩʱ£¬¾Í»áµ÷ÓÃContentHandler.startElement()·½·¨£¬²¢°Ñ±êÇ©ÃûPOEM×÷Ϊ²ÎÊý´«µÝ¹ýÈ¥¡£ÔÚÄãʵÏÖµÄstartElement()·½·¨ÖÐÐèÒª×öÏàÓ¦µÄ¶¯×÷£¬ÒÔ´¦Àíµ±<POEM>³öÏÖʱӦ¸Ã×öµÄÊÂÇé¡£¸÷¸öʼþËæ×ŽâÎöµÄ¹ý³Ì£¨Ò²¾ÍÊÇÎĵµ¶ÁÈëµÄ¹ý³Ì£©Ò»¸ö¸ö˳ÐòµÄ±»Å׳ö£¬ÏàÓ¦µÄ·½·¨Ò²»á±»Ë³ÐòµÄµ÷Óã¬×îºó£¬µ±½âÎöÍê³É£¬·½·¨¶¼±»µ÷Óú󣬶ÔÎĵµµÄ´¦ÀíÒ²¾ÍÍê³ÉÁË¡£ÏÂÃæµÄÕâ¸ö±í£¬ÁгöÁËÔÚ½âÎöÉÏÃæµÄÄǸöXMLÎļþµÄʱºò£¬Ë³Ðò±»µ÷Óõķ½·¨£º
Óöµ½µÄÏîÄ¿ ·½·¨»Øµ÷
{Îĵµ¿ªÊ¼} startDocument()
<POEM> startElement(null,"POEM",null,{Attributes})
"\n" characters("<POEM>\n...", 6, 1)
<AUTHOR> startElement(null,"AUTHOR",null,{Attributes})
"Ogden Nash" characters("<POEM>\n...", 15, 10)
</AUTHOR> endElement(null,"AUTHOR",null)
"\n" characters("<POEM>\n...", 34, 1)
<TITLE> startElement(null,"TITLE",null,{Attributes})
"Fleas" characters("<POEM>\n...", 42, 5)
</TITLE> endElement(null,"TITLE",null)
"\n" characters("<POEM>\n...", 55, 1)
<LINE> startElement(null,"LINE",null,{Attributes})
"Adam" characters("<POEM>\n...", 62, 4)
</LINE> endElement(null,"LINE",null)
"\n" characters("<POEM>\n...", 67, 1)
</POEM> endElement(null,"POEM",null)
{Îĵµ½áÊø} endDocument()
ContentHandlerʵ¼ÊÉÏÊÇÒ»¸ö½Ó¿Ú£¬µ±´¦ÀíÌØ¶¨µÄXMLÎļþµÄʱºò£¬¾ÍÐèҪΪÆä´´½¨Ò»¸öʵÏÖÁËContentHandlerµÄÀàÀ´´¦ÀíÌØ¶¨µÄʼþ£¬¿ÉÒÔ˵£¬Õâ¸öʵ¼ÊÉϾÍÊÇSAX´¦ÀíXMLÎļþµÄºËÐÄ¡£ÏÂÃæÎÒÃÇÀ´¿´¿´¶¨ÒåÔÚÆäÖеÄһЩ·½·¨£º
void characters(char[] ch, int start, int length)£º
Õâ¸ö·½·¨ÓÃÀ´´¦ÀíÔÚXMLÎļþÖжÁµ½×Ö·û´®£¬ËüµÄ²ÎÊýÊÇÒ»¸ö×Ö·ûÊý×飬ÒÔ¼°¶Áµ½µÄÕâ¸ö×Ö·û´®ÔÚÕâ¸öÊý×éÖÐµÄÆðʼλÖúͳ¤¶È£¬ÎÒÃÇ¿ÉÒÔºÜÈÝÒ×µÄÓÃStringÀàµÄÒ»¸ö¹¹Ôì·½·¨À´»ñµÃÕâ¸ö×Ö·û´®µÄStringÀࣺString charEncontered=new String(ch,start,length)¡£
void startDocument()£º
µ±Óöµ½ÎĵµµÄ¿ªÍ·µÄʱºò£¬µ÷ÓÃÕâ¸ö·½·¨£¬¿ÉÒÔÔÚÆäÖÐ×öһЩԤ´¦ÀíµÄ¹¤×÷¡£
void endDocument()£º
ºÍÉÏÃæµÄ·½·¨Ïà¶ÔÓ¦£¬µ±Îĵµ½áÊøµÄʱºò£¬µ÷ÓÃÕâ¸ö·½·¨£¬¿ÉÒÔÔÚÆäÖÐ×öÒ»Ð©ÉÆºóµÄ¹¤×÷¡£
void startElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName, Attributes atts)
µ±¶Áµ½Ò»¸ö¿ªÊ¼±êÇ©µÄʱºò£¬»á´¥·¢Õâ¸ö·½·¨¡£ÔÚSAX1.0°æ±¾Öв¢²»Ö§³ÖÃûÓò£¬¶øÔÚÐŵÄ2.0°æ±¾ÖÐÌṩÁ˶ÔÃûÓòµÄÖ§³Ö£¬Õâ¶ù²ÎÊýÖеÄnamespaceURI¾ÍÊÇÃûÓò£¬localNameÊDZêÇ©Ãû£¬qNameÊDZêÇ©µÄÐÞÊÎǰ׺£¬µ±Ã»ÓÐʹÓÃÃûÓòµÄʱºò£¬ÕâÁ½¸ö²ÎÊý¶¼Î´null¡£¶øattsÊÇÕâ¸ö±êÇ©Ëù°üº¬µÄÊôÐÔÁÐ±í¡£Í¨¹ýatts£¬¿ÉÒԵõ½ËùÓеÄÊôÐÔÃûºÍÏàÓ¦µÄÖµ¡£Òª×¢ÒâµÄÊÇSAXÖÐÒ»¸öÖØÒªµÄÌØµã¾ÍÊÇËüµÄÁ÷ʽ´¦Àí£¬ÔÚÓöµ½Ò»¸ö±êÇ©µÄʱºò£¬Ëü²¢²»»á¼Í¼ÏÂÒÔǰËùÅöµ½µÄ±êÇ©£¬Ò²¾ÍÊÇ˵£¬ÔÚstartElement()·½·¨ÖУ¬ËùÓÐÄãËùÖªµÀµÄÐÅÏ¢£¬¾ÍÊDZêÇ©µÄÃû×ÖºÍÊôÐÔ£¬ÖÁÓÚ±êÇ©µÄǶÌ׽ṹ£¬Éϲã±êÇ©µÄÃû×Ö£¬ÊÇ·ñÓÐ×ÓÔªÊôµÈµÈÆäËüÓë½á¹¹Ïà¹ØµÄÐÅÏ¢£¬¶¼ÊDz»µÃ¶øÖªµÄ£¬¶¼ÐèÒªÄãµÄ³ÌÐòÀ´Íê³É¡£ÕâʹµÃSAXÔÚ±à³Ì´¦ÀíÉÏûÓÐDOMÀ´µÃÄÇô·½±ã¡£
void endElement(java.lang.String namespaceURI, java.lang.String localName, java.lang.String qName)
Õâ¸ö·½·¨ºÍÉÏÃæµÄ·½·¨Ïà¶ÔÓ¦£¬ÔÚÓöµ½½áÊø±êÇ©µÄʱºò£¬µ÷ÓÃÕâ¸ö·½·¨¡£
ÒòΪContentHandlerÊÇÒ»¸ö½Ó¿Ú£¬ÔÚʹÓõÄʱºò¿ÉÄÜ»áÓÐЩ²»·½±ã£¬Òò¶ø£¬SAXÖл¹ÎªÆäÖÆ¶¨ÁËÒ»¸öHelperÀࣺDefaultHandler£¬ËüʵÏÖÁËÕâ¸ö½Ó¿Ú£¬µ«ÊÇÆäËùÓеķ½·¨Ì嶼Ϊ¿Õ£¬ÔÚʵÏÖµÄʱºò£¬ÄãÖ»ÐèÒª¼Ì³ÐÕâ¸öÀ࣬ȻºóÖØÔØÏàÓ¦µÄ·½·¨¼´¿É¡£
µ½Õâ¶ùSAXµÄ»ù±¾ÖªÊ¶ÒѾ²î²»¶à½²ÍêÁË£¬ÏÂÃæÎÒÃÇÀ´¿´¿´Á½¸ö¾ßÌåµÄÀý×Ó£¬ÒÔ¸üºÃµÄÀí½âSAXµØÓ÷¨¡£