当前位置: 萬仟网 > IT编程>软件设计>架构 > SAX方式解析XML文件

SAX方式解析XML文件

2020年09月29日  | 萬仟网IT编程  | 我要评论
SAX,全称Simple API for XML,是一种以事件驱动的 XML API,SAX 与 DOM 不同的是它边扫描边解析, 自顶向下依次解析, 由于边扫描边解析, 所以它解析 XML 具有速度快, 占用内存少的优点。

SAX,全称Simple API for XML,是一种以事件驱动的 XML API,SAX 与 DOM 不同的是它边扫描边解析, 自顶向下依次解析, 由于边扫描边解析, 所以它解析 XML 具有速度快, 占用内存少的优点。

SAX解析XML的步骤

  1. 创建SAXParserFactory对象
  2. 通过SAXParserFactory对象创建SAXParser对象
  3. 创建DefaultHandler的子类
  4. 调用parse()方法

XML文件

<?xml version="1.0" encoding="UTF-8"?> <books> <book id="1001"> <name>oracle</name> <author>WXZ</author> <price>15</price> </book> <book id="1002"> <name>mysql</name> <author>Ning</author> <price>36.5</price> </book> </books> 

DefaultHandler的子类

class BookDefaultHandler extends DefaultHandler{ /**
     * 解析XML文件开始时调用
     * @throws SAXException
     */ @Override public void startDocument() throws SAXException { super.startDocument(); System.out.println("解析XML文件开始"); } /**
     * 解析XML文件结束时调用
     * @throws SAXException
     */ @Override public void endDocument() throws SAXException { super.endDocument(); System.out.println("解析XML文件结束"); } /**
     * 解析XML文件中的节点时调用
     * @param uri
     * @param localName
     * @param qName
     * @param attributes
     * @throws SAXException
     */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); if("book".equals(qName)){ //获取所有属性的长度 int length = attributes.getLength(); //遍历属性 for(int i = 0; i < length; i++){ String name = attributes.getQName(i); String value = attributes.getValue(i); System.out.println("属性名:"+name+"\t属性值:"+value); } }else if(!"books".equals(qName) && !"book".equals(qName)){ System.out.print("节点名:"+qName+"\t"); } } /**
     * 解析XML文件中的节点结束时调用
     * @param uri
     * @param localName
     * @param qName
     * @throws SAXException
     */ @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); } /**
     * 获取节点值
     * @param ch
     * @param start
     * @param length
     * @throws SAXException
     */ @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); String value = new String(ch,start,length); if(!"".equals(value.trim())){ System.out.println("节点值:"+value); } } } 

解析过程

/**
 * SAX解析XML
 */ public class SaxXML { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { //(1)创建SAXParserFactory对象 SAXParserFactory saxParserFactory = new SAXParserFactoryImpl(); //(2)通过SAXParserFactory对象创建SAXParser对象 SAXParser parser = saxParserFactory.newSAXParser(); //(3)创建DefaultHandler的子类 BookDefaultHandler bookDefaultHandler = new BookDefaultHandler(); //(4)调用parse()方法 parser.parse("book.xml",bookDefaultHandler); } } 

运行结果:
在这里插入图片描述

本文地址:https://blog.csdn.net/m0_46294535/article/details/108868100

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
Copyright © 2017-2020  萬仟网 保留所有权利. 粤ICP备17035492号