由XML解析学习工厂模式

代码段1:

startupData = 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+"的解析完成!");

    }

  }

这里有2个需要注意的问题,

1 读取的元素值如何存储

2 就是xml的两个分支中的同名字段如何处理?

上一篇:在linux环境下配置node:node + npm + forever


下一篇:Bugku-CTF之管理员系统+程序员本地网站