美文网首页
SAX解析器

SAX解析器

作者: iMikasa_ | 来源:发表于2021-07-27 20:01 被阅读0次

SAX(Simple API for XML)是一个基于事件的 XML 文档解析器。与 DOM 解析器不同,SAX 解析器不创建解析树。SAX 是 XML 的流接口,这意味着使用 SAX 的应用程序接收有关正在处理的 XML 文档的事件通知、元素和属性,从文档顶部开始,以文档的结束结束。

  • 从上到下读取 XML 文档
  • 读取顺序与它们在文档中出现的顺序相同

它是一种基于流的解析方式,边读取XML边解析,并以事件回调的方式让调用者获取数据。因为是一边读一边解析,所以无论XML有多大,占用的内存都很小。

SAX解析会触发一系列事件:
  • startDocument:开始读取XML文档;
  • startElement:读取到了一个元素,例如<book>;
  • characters:读取到了字符;
  • endElement:读取到了一个结束的元素,例如</book>;
  • endDocument:读取XML文档结束。

解析的具体操作

InputStream inputStream = new FileInputStream("book1.xml");
SAXParserFactory saxParserFactory = SAXParserFactory.newDefaultInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
saxParser.parse(inputStream,new MyHandler());

Handler

public class UserHandler extends DefaultHandler {

   boolean bFirstName = false;
   boolean bLastName = false;
   boolean bNickName = false;
   boolean bMarks = false;

   @Override
   public void startElement(String uri, 
   String localName, String qName, Attributes attributes) throws SAXException {

      if (qName.equalsIgnoreCase("student")) {
         String rollNo = attributes.getValue("rollno");
         System.out.println("Roll No : " + rollNo);
      } else if (qName.equalsIgnoreCase("firstname")) {
         bFirstName = true;
      } else if (qName.equalsIgnoreCase("lastname")) {
         bLastName = true;
      } else if (qName.equalsIgnoreCase("nickname")) {
         bNickName = true;
      }
      else if (qName.equalsIgnoreCase("marks")) {
         bMarks = true;
      }
   }

   @Override
   public void endElement(String uri, 
   String localName, String qName) throws SAXException {
      if (qName.equalsIgnoreCase("student")) {
         System.out.println("End Element :" + qName);
      }
   }

   @Override
   public void characters(char ch[], int start, int length) throws SAXException {
      
      if (bFirstName) {
         System.out.println("First Name: " 
            + new String(ch, start, length));
         bFirstName = false;
      } else if (bLastName) {
         System.out.println("Last Name: " + new String(ch, start, length));
         bLastName = false;
      } else if (bNickName) {
         System.out.println("Nick Name: " + new String(ch, start, length));
         bNickName = false;
      } else if (bMarks) {
         System.out.println("Marks: " + new String(ch, start, length));
         bMarks = false;
      }
   }
}

相关文章

  • SAX解析器

    SAX(Simple API for XML)是一个基于事件的 XML 文档解析器。与 DOM 解析器不同,SAX...

  • 2017-06-10-Android XML解析

    Android xml解析 1,SAX解析器 2,Dom解析器 3,pull解析器

  • 2020-12-09:python-sax

    Python中解析xml接口一般有SAX、DOM、ElementTree,SAX是基于事件处理机制,有“解析器”和...

  • PYTHON XML解析-SAX解析

    1.SAX模块 SAX是一种基于事件驱动的API,利用SAX解析XML牵扯到两个部分,解析器和事件处理器。其中解析...

  • Jsoup快速入门

    xml常见的解析器: JAXP:sun公司提供的解析器,支持dom和sax两种思想 DOM4J:一款非常优秀的解析...

  • DOM和SAX(未完)

    一.JAXP 我们都知道有很多解析器,都对DOM和SAX提供了实现。如果我们在项目一开始中使用了A解析器,后来因为...

  • 49.xml解析方式

    一.DOM(JAXP Crimson解析器) 二.SAX 三.JDOM 四.DOM4J 区别: 一.DOM4J性能...

  • NSXMLParser

    NSXMLParser是iOS自带SAX方式解析,使用方法为:1.// 传入XML数据,初始化解析器[[NSXML...

  • XML数据解析

    解析来自服务器返回的XML数据,介绍两种方式:1,NSXMLParser解析器 : SAX方式解析(从根元素开始,...

  • SAX和DOM解析XML

    PULL方式 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件...

网友评论

      本文标题:SAX解析器

      本文链接:https://www.haomeiwen.com/subject/lvftvltx.html