使用XMLReader接口解析XML-个人记录

如何获取XMLReader接口

从JDK文档来看,有两种方法:

使用SAXParserFactory+SAXParser[以下简称a方法]

XMLReader aaa=SAXParserFactory.newInstance().newSAXParser().getXMLReader();

使用XMLReaderFactory[以下简称b方法]

XMLReader bbb=XMLReaderFactory.createXMLReader();

两种方法不同之处

在JDK文档a方法中SAXParser类的getXMLReader()方法的注释:

返回由此类的实现封装的 XMLReader。

SAXParser类又是由SAXParserFactory的newSAXParser()方法创建而来,其注释:

使用当前配置的工厂参数创建 SAXParser 的一个新实例。

而在JDK文档中b方法使用XMLReaderFactory类的createXMLReader()方法有这样一段注释:

尝试从系统默认值创建一个 XMLReader。

可以发现,想要获取XMLReader,是需要环境支持的(能力有限,无法分析出具体是哪些环境,相询JDK文档的XMLReaderFactory类),

在a方法中则是从由SAXParserFactory+SAXParser设置好的环境中创建XMLReader,其中主要环境设置工作由SAXParserFactory来做。

而在b方法中会直接使用系统默认的环境,但这个环境却不一定可以正常使用,除非你手动设置其创建环境(笔者表示还不会)

SAXParserFactory和SAXParser两个抽象类主要作用

a方法中的SAXParserFactory在笔者看来,起主要作用应该就是根据当前系统环境,

设置一个可以正常创建出XMLReader解析器的环境,并提供创建SAXParser类对象的方法。

SAXParser的主要作用应该是根据SAXParserFactory工厂类提供的环境来创建XMLReader解析器,

并且它还有一些重要的作用:

获取SAXParser类的实例之后,将可以从各种输入源解析 XML。这些输入源为 InputStream、File、URL 和 SAX InputSource。

它包含一系列的parse(,)方法

也即是说SAXParser还定义了将各种源解析为XML并传递给继承自DefaultHandler或HandlerBase(不推荐使用)的对象,以提供给XMLReader解析器来解析

那么如何获取这两个类呢

上文提到这两个类都是抽象类,虽然这两个类都有构造方法,但却都是受保护的protected修饰的

并且抽象类也都是无法直接实例化的,也就是无法通过new关键字来获取类的对象

其突破口就在SAXParserFactory抽象类中的,这个类定义了两个静态方法:

newInstance()
newInstance(String factoryClassName, ClassLoader classLoader) 

从名字就可以看出来是用来获取SAXParserFactory的实例化对象的,

有了SAXParserFactory的实例化对象就可以设置一些环境,或让其自动设置,

然后就可以用它来创建SAXParser抽象类的对象,使用newSAXParser()方法即可

newSAXParser()这个方法不是静态方法,所以只能先通过newInstance()静态方法来实例化出SAXParserFactory,

然后才能使用SAXParserFactory的非静态方法newSAXParser()来获得SAXParser的对象,因为它们都是抽象类!

获得了SAXParser的对象后就可以使用其getXMLReader()方法来获取XMLReader解析器了

另外,XMLReader虽然名为解析器,但具体的解析工作却不是由它来做的,它只是一个框架,

具体的解析工作由继承自DefaultHandler或HandlerBase(不推荐使用)的对象来做:

XMLReader的setContentHandler(DefaultHandler的子类的对象);

DefaultHandler类可用作 SAX2 应用程序的有用基类:

它提供四个核心 SAX2 处理程序类中的所有回调的默认实现,也就是它实现了以下四个接口:

EntityResolver

DTDHandler

ContentHandler

ErrorHandler

时间: 2024-08-29 02:45:12

使用XMLReader接口解析XML-个人记录的相关文章

python3.4.3 调用http接口 解析response xml后插入数据库

工作中需要调用一个http的接口,等不及java组开发,就试着用python去调用.Python版本3.4.3 完整的流程包括:从sqlServer取待调用的合同列表 -> 循环调用http接口 -> 将response写入xml文件 -> 解析xml -> 插入oracle数据库 要去公司旅游了,先把代码放着,以后再详细解释记录一下. #!/usr/bin/python3 import time import pymssql import urllib.parse import

Oracle解析 xml 记录一下(未完待续)

Oracle解析 xml 记录一下. SQL> desc xmlparser; PROCEDURE FREEPARSER Argument Name                  Type                    In/Out Default? ------------------------------ ----------------------- ------ -------- P                              RECORD          

C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码)

文章导读: C#微信公众号接口开发之从零开发(一) 接入微信公众平台 微信接入之后,微信通过我们接入的地址进行通信,其中的原理是微信用户发送消息给微信公众账号,微信服务器将消息以xml的形式发送到我们的绑定的地址上,通过解析XML数据,获取到微信用户发送的消息,让根据微信消息(文本:关键字,图片,语音等等)回复XML格式的数据给微信服务器,微信服务器再将接收到的消息返回给用户微信. 我们所需要做的:接收消息和返回消息 一.创建实体类 首先看文档http://mp.weixin.qq.com/wi

[C#]记一次解析XML转对象的笔记

项目中调用第三方API,返回格式是XML字符串,需要将XML反序列化为对象,格式如下: 1 <?xml version="1.0"?> 2 <Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" totalCount="123" resultCode

6. SAX解析XML

SAX解析: SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分: 解析器和事件处理器 : 1. 解析器可以使用SAXP的API创建,创建出SAX解析器后, 就可以指定解析器去解析某个XML文档. 解析器采用SAX方式在解析某个XML文档时, 它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法, 解析器在调用事件处理器的方法时, 会把当前解析到的xml文件内容作为方法的参数传递给事件处理器. 2. 事件处理器由程序员编写,程序员通过事件处理器

XML学习笔记(二):使用 DOM和SAX 解析XML :

一.XML解析的简介 1.一般来说xml解析的方式有两种,Dom与SAX,且各有优缺点.pull是第三种方法见:pull解析XML 1)DOM:dom对象树 ①.整个XML放入内存,转换为Document对象: ②.每个元素,转换成Element对象 ③.文本,转换成Text对象 ④.属性,转换成Attribute对象 优缺点:元素的CRUD比较简单,但是内存消耗大,大的xml文档不适合. 补充:内存不足时,可以修改参数,调整JVM的内存大小 1.java.lang.OutOfMemoryErr

SAX解析XML文件

SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准.SAX是一种轻量型的方法,不像DOM解析时,把XML文档全部载入内存中,在PC上操作,Dom还有 优势,但在手机中端上则无优势,因为手机内存和硬件都比不上PC强.使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器.SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理. 在SAX接口中,事件源是org

Android DOM、SAX、Pull解析XML(转)

本篇随笔将详细讲解如何在Android当中解析服务器端传过来的XML数据,这里将会介绍解析xml数据格式的三种方式,分别是DOM.SAX以及PULL. 一.DOM解析XML 我们首先来看看DOM(Document Object Model)这种方式解析xml,通过DOM解析xml在j2ee开发中非常的常见,它将整个xml看成是一个树状的结构,在解析的时候,会将整个xml文件加载到我们的内存当中,然后通过DOM提供的API来对我们的xml数据进行解析,这种方式解析xml非常的方便,并且我们可以通过

android学习二十二(使用SAX解析xml)

上一篇博客是使用Pull解析xml文件的,Pull解析方式虽然非常好用,但它并不是我们唯一的选择.SAX解析也是一种特别常用的XML解析方式,虽然它的用法比Pull解析复杂,但在语义方面会更加的清楚. 通常情况下我们都会新建一个类继承自DefaultHandler,并重写父类的五个方法,如下所示: package com.jack.networktest; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import