首页 > 代码库 > 由XML解析学习工厂模式

由XML解析学习工厂模式

代码段1:       

startupData = http://www.mamicode.com/new StartupData();

/* 设定自定义的MyHandler给XMLReader */

  StartupXMLHandler startupDataXMLHandler = new StartupXMLHandler();
  startupDataXMLHandler.setData(startupData);

            /* 产生SAXParser对象 */
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
     /* 产生XMLReader对象 */
       XMLReader xmlReader = sp.getXMLReader();//SAXParserFactory.newInstance().newSAXParser().getXMLReader();

     xmlReader.setContentHandler(startupDataXMLHandler);

     xmlReader.parse(input);

发现:关键有三个类:

         (1)StartupData

          (2)  StartUPXMLHandler

          (3)  XMLReader

其中(1)是存放解析XML结果的类,没啥啰嗦的。

      (2)看下面这段代码:

       SAX ,事件驱动。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个 文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态 性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;

  public class StartUPXMLHandler extends DefaultHandler{

           @Override

    public void startDocument() throws SAXException{

      System.out.println("开始解析!");

    }

           @Override

    public void endDocument() throws SAXException{

      System.out.println("解析完成!");

    }

           @Override

    public void startElement(String uri, String localName, String qName,Attributes atts) throws SAXException {

      System.out.println("元素名:"+qName);

    }

           @Override

    public void endElement(String uri, String localName, String qName) throws SAXException{

      System.out.println("对"+qName+"的解析完成!");

    }

  }