SAX方式解析XML文件
程序员文章站
2022-06-14 22:14:01
SAX,全称Simple API for XML,是一种以事件驱动的 XML API,SAX 与 DOM 不同的是它边扫描边解析, 自顶向下依次解析, 由于边扫描边解析, 所以它解析 XML 具有速度快, 占用内存少的优点。...
SAX,全称Simple API for XML,是一种以事件驱动的 XML API,SAX 与 DOM 不同的是它边扫描边解析, 自顶向下依次解析, 由于边扫描边解析, 所以它解析 XML 具有速度快, 占用内存少的优点。
SAX解析XML的步骤
- 创建SAXParserFactory对象
- 通过SAXParserFactory对象创建SAXParser对象
- 创建DefaultHandler的子类
- 调用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
下一篇: Python学习笔记(三)面向对象