½Î÷¹ã¸æÍø
±êÌâ:
JavaʵÏÖѧϰ±Ê¼Ç£¨Ò»£©
[´òÓ¡±¾Ò³]
×÷Õß:
900wwj
ʱ¼ä:
2008-12-28 12:11
±êÌâ:
JavaʵÏÖѧϰ±Ê¼Ç£¨Ò»£©
¡¡¡¡Ê×ÏÈ£¬Ïȸø³öÒ»¸ö±È½Ï»ù±¾µÄ´¦ÀíxmlÎļþµÄ³ÌÐò¡£Äã²»±Øϸ¿´£¬Ö±½ÓÌø¹ý¼´¿É¡£ÐèҪʱ¿ÉÒÔ·µ»ØÀ´¿´¡£ ¡¡¡¡ ¡¡¡¡Echo01.java ¡¡¡¡ ¡¡¡¡import java.io.*; ¡¡¡¡ ¡¡¡¡import org.xml.sax.*; ¡¡¡¡ ¡¡¡¡import org.xml.sax.helpers.DefaultHandler; ¡¡¡¡ ¡¡¡¡import javax.xml.parsers.SAXParserFactory; ¡¡¡¡ ¡¡¡¡import javax.xml.parsers.ParserConfigurationException; ¡¡¡¡ ¡¡¡¡import javax.xml.parsers.SAXParser; ¡¡¡¡ ¡¡¡¡public class Echo01 extends DefaultHandler ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡StringBuffer textBuffer; ¡¡¡¡ ¡¡¡¡public static void main(String argv[]) ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡¡¡if (argv.length != 1) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡System.err.println("Usage: cmd filename"); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡System.exit(1); ¡¡¡¡ ¡¡¡¡¡¡¡¡} ¡¡¡¡ ¡¡¡¡¡¡¡¡// Use an instance of ourselves as the SAX event handler ¡¡¡¡ ¡¡¡¡¡¡¡¡DefaultHandler handler = new Echo01(); ¡¡¡¡ ¡¡¡¡¡¡¡¡// Use the default (non-validating) parser ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡SAXParserFactory factory = SAXParserFactory.newInstance(); ¡¡¡¡ ¡¡¡¡¡¡¡¡try { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡// Set up output stream ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡out = new OutputStreamWriter(System.out, "UTF-8"); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡// Parse the input ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡SAXParser saxParser = factory.newSAXParser(); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡saxParser.parse( new File(argv[0]), handler); ¡¡¡¡ ¡¡¡¡¡¡¡¡} catch (Throwable t) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡t.printStackTrace(); ¡¡¡¡ ¡¡¡¡¡¡¡¡} ¡¡¡¡ ¡¡¡¡¡¡¡¡System.exit(0); ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡static private Writer¡¡out; ¡¡¡¡ ¡¡¡¡//=========================================================== ¡¡¡¡ ¡¡¡¡// SAX DocumentHandler methods ¡¡¡¡ ¡¡¡¡//=========================================================== ¡¡¡¡ ¡¡¡¡public void startDocument() ¡¡¡¡ ¡¡¡¡throws SAXException ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡¡¡emit(""); ¡¡¡¡ ¡¡¡¡¡¡¡¡nl(); ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡public void endDocument() ¡¡¡¡ ¡¡¡¡throws SAXException ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡¡¡try { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡nl(); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡out.flush(); ¡¡¡¡ ¡¡¡¡¡¡¡¡} catch (IOException e) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡throw new SAXException("I/O error", e); ¡¡¡¡ ¡¡¡¡¡¡¡¡} ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡public void startElement(String namespaceURI, ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ String sName, // simple name ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ String qName, // qualified name ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Attributes attrs) ¡¡¡¡ ¡¡¡¡throws SAXException ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡¡¡echoText(); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡String eName = sName; // element name ¡¡¡¡ ¡¡¡¡¡¡¡¡if ("".equals(eName)) eName = qName; // not namespaceAware ¡¡¡¡ ¡¡¡¡¡¡¡¡emit("<" eName); ¡¡¡¡ ¡¡¡¡¡¡¡¡if (attrs != null) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡for (int i = 0; i < attrs.getLength(); i ) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡String aName = attrs.getLocalName(i); // Attr name ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡if ("".equals(aName)) aName = attrs.getQName(i); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡emit(" "); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡emit(aName "=\"" attrs.getValue(i) "\""); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡} ¡¡¡¡¡¡ } ¡¡¡¡ ¡¡¡¡¡¡¡¡emit(">"); ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡public void endElement(String namespaceURI, ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ String sName, // simple name ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ String qName¡¡// qualified name ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡) ¡¡¡¡ ¡¡¡¡throws SAXException ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡¡¡echoText(); ¡¡¡¡ ¡¡¡¡¡¡¡¡String eName = sName; // element name ¡¡¡¡ ¡¡¡¡¡¡¡¡if ("".equals(eName)) eName = qName; // not namespaceAware ¡¡¡¡ ¡¡¡¡¡¡¡¡emit(""); ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡public void characters(char buf[], int offset, int len) ¡¡¡¡ ¡¡¡¡throws SAXException ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ String s = new String(buf, offset, len); ¡¡¡¡ ¡¡¡¡¡¡¡¡if (textBuffer == null) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡ textBuffer = new StringBuffer(s); ¡¡¡¡ ¡¡¡¡¡¡¡¡} else { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡ textBuffer.append(s); ¡¡¡¡ ¡¡¡¡¡¡¡¡} ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡//=========================================================== ¡¡¡¡ ¡¡¡¡// Utility Methods ... ¡¡¡¡ ¡¡¡¡//=========================================================== ¡¡¡¡ ¡¡¡¡// Display text accumulated in the character buffer ¡¡¡¡ ¡¡¡¡private void echoText() ¡¡¡¡ ¡¡¡¡throws SAXException ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡¡¡if (textBuffer == null) return; ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ String s = "" textBuffer; ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡emit(s); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡textBuffer = null; ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡// Wrap I/O exceptions in SAX exceptions, to ¡¡¡¡ ¡¡¡¡// suit handler signature requirements ¡¡¡¡ ¡¡¡¡private void emit(String s) ¡¡¡¡ ¡¡¡¡throws SAXException ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡¡¡try { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡out.write(s); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡out.flush(); ¡¡¡¡ ¡¡¡¡¡¡¡¡} catch (IOException e) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡throw new SAXException("I/O error", e); ¡¡¡¡ ¡¡¡¡¡¡¡¡} ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡// Start a new line ¡¡¡¡ ¡¡¡¡private void nl() ¡¡¡¡ ¡¡¡¡throws SAXException ¡¡¡¡ ¡¡¡¡{ ¡¡¡¡ ¡¡¡¡¡¡String lineEnd =¡¡System.getProperty("line.separator"); ¡¡¡¡ ¡¡¡¡¡¡¡¡try { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡out.write(lineEnd); ¡¡¡¡ ¡¡¡¡¡¡¡¡} catch (IOException e) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡throw new SAXException("I/O error", e); ¡¡¡¡ ¡¡¡¡¡¡¡¡} ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡} ¡¡¡¡ ¡¡¡¡´Ó³ÌÐòÖпÉÒÔ¿´³ö£¬½âÎöÒ»¸öXMLÎļþµÄºËÐÄÓï¾äÊÇÏÂÃæÒ»²¿·Ö£º ¡¡¡¡ ¡¡¡¡ // Use an instance of ourselves as the SAX event handler ¡¡¡¡ ¡¡¡¡¡¡¡¡DefaultHandler handler = new Echo01(); ¡¡¡¡ ¡¡¡¡¡¡¡¡ // Use the default (non-validating) parser ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡¡¡SAXParserFactory factory = SAXParserFactory.newInstance(); ¡¡¡¡ ¡¡¡¡¡¡¡¡try { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡// Set up output stream ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡out = new OutputStreamWriter(System.out, "UTF-8"); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡ // Parse the input ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡SAXParser saxParser = factory.newSAXParser(); ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡saxParser.parse( new File(argv[0]), handler); ¡¡¡¡ ¡¡¡¡¡¡¡¡ } catch (Throwable t) { ¡¡¡¡ ¡¡¡¡¡¡¡¡¡¡¡¡t.printStackTrace(); ¡¡¡¡ ¡¡¡¡¡¡¡¡} ¡¡¡¡ ¡¡¡¡ÏÈÊÇ´´½¨Ò»¸öSAXParserFactory¹¤³§ÀàµÄʵÀý£¬È»ºóͨ¹ýSAXParser saxParser = factory.newSAXParser(); Õâ¸ö¹¤³§ÀàµÄ·½·¨´´½¨ÁËÒ»¸ösaxParser¡£½«xmlÎļþ£¨new File(argv[0])£©ºÍÒ»¸öSax Event Handler£¨handler£©£¨ÔÚÕâ¸ö³ÌÐòÀïÃ棬Õâ¸öHandlerÆäʵÊDZ¾ÉíÕâ¸öÀ࣬Õâ¸öÀà¼Ì³ÐÁËorg.xml.sax.helpers.DefaultHandler Õâ¸öÀ࣬²¢ÇÒÔÚÇ°Ãæ³õʼ»¯ÁËËü£ºDefaultHandler handler = new Echo01();¡¡£©´«µÝ¸øËü£¬ÈÃËü½øÐнâÎö¡£ ¡¡¡¡ ¡¡¡¡¹ØÓÚxmlÎļþµÄ½âÎö¹ý³ÌÖеĴ¦ÀíÈ«²¿ÔÚHandlerÀïÃæʵÏÖ¡£Ò»°ãParser½ÓÊܵÄÊÇDefaultHandler»òÕßHandlerBaseÕâÁ½¸öÀà¡£ Õâ¸öÀý×ÓÀïÃæµÄÀàÊǼ̳ÐDefaultHandlerÕâ¸öÐéÀàµÄ¡£¿´ÏÂͼ£º ¡¡¡¡¡¡
µÇ¼/×¢²áºó¿É¿´´óͼ
¡¡¡¡¶øDefaultHandlerÊÇʵÏÖÁËEntityResolver, DTDHandler, ContentHandler, ErrorHandlerËĸö½Ó¿ÚµÄÐéÀà¡£·Ö±ð¶¨ÒåÁËÈçϵķ½·¨£º ¡¡¡¡¡¡
µÇ¼/×¢²áºó¿É¿´´óͼ
¡¡¡¡²»Í¬µÄ·½·¨£¬ÔÚ²»Í¬µÄʱºò±»Parserµ÷Ó㬣¨Õâ¸ö²»Í¬µÄʱºò¾ÍÊÇEvent-based£© ¡¡¡¡ ¡¡¡¡Ïêϸ½éÉÜ£º£¨ÔÝÂÔ£© ¡¡¡¡ ¡¡¡¡DefualtHandlerµÄUMLͼÈçÏ£º ¡¡¡¡¡¡
»¶Ó¹âÁÙ ½Î÷¹ã¸æÍø (http://bbs.jxadw.com/)
Powered by Discuz! X3.2