
org.xerial.xml.pullparser.ProgressiveSAXParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xerial-xml Show documentation
Show all versions of xerial-xml Show documentation
XML Parser/Indexing library.
The newest version!
/*--------------------------------------------------------------------------
* Copyright 2004 Taro L. Saito
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*--------------------------------------------------------------------------*/
//--------------------------------------
// XerialJ Project
//
// ProgressiveSAXParser.java
// Since: 2005/06/03
//
// $URL$
// $Author$
//--------------------------------------
package org.xerial.xml.pullparser;
import static org.xmlpull.v1.XmlPullParser.END_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.END_TAG;
import static org.xmlpull.v1.XmlPullParser.START_DOCUMENT;
import static org.xmlpull.v1.XmlPullParser.START_TAG;
import static org.xmlpull.v1.XmlPullParser.TEXT;
import java.io.IOException;
import java.util.List;
import java.util.Vector;
import org.xerial.xml.XMLErrorCode;
import org.xerial.xml.XMLException;
import org.xerial.xml.XMLInputSource;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
/**
* SAX Parser that can control parsing steps by its own
*
*
* XMLInputSource xmlSource = new XMLInputSource("booklist.xml");
* ProgressiveSAXParser parser = new ProgressiveSAXParser(handler, xmlSource);
*
* int state;
* while ((state = parser.parseStep()) != XmlPullParser.END_DOCUMENT)
* {}
*
*
*
* @author leo
*
*/
public class ProgressiveSAXParser
{
private Vector _handlerList = new Vector();
private boolean _keepParserStatusWhileHandlingSAXEvents = true;
private XMLInputSource _inputSource = null;
private XmlPullParser _parser = null;
/**
* @throws XMLParserException
*
*/
public ProgressiveSAXParser(SAXEventHandler handler, XMLInputSource inputSource) throws XMLException
{
_handlerList.add(handler);
setXMLInputSource(inputSource);
}
public ProgressiveSAXParser(List handlerList, XMLInputSource inputSource) throws XMLException
{
for (SAXEventHandler handler : handlerList)
_handlerList.add(handler);
setXMLInputSource(inputSource);
}
private void enablePullParsingWhileHandlingEvents()
{
_keepParserStatusWhileHandlingSAXEvents = false;
}
private void setXMLInputSource(XMLInputSource inputSource) throws XMLException
{
_inputSource = inputSource;
_parser = PullParserUtil.newParser(_inputSource.getReader());
_parser = _keepParserStatusWhileHandlingSAXEvents ? new ParseContext(_parser) : _parser;
}
public int parseStep() throws Exception, IOException
{
assert _parser != null;
try
{
int state = _parser.next();
switch (state)
{
case START_TAG:
for (SAXEventHandler handler : _handlerList)
handler.startTag(_parser);
break;
case END_TAG:
break;
case TEXT:
for (SAXEventHandler handler : _handlerList)
handler.text(_parser);
break;
case END_DOCUMENT:
for (SAXEventHandler handler : _handlerList)
handler.endDocument(_parser);
break;
case START_DOCUMENT:
for (SAXEventHandler handler : _handlerList)
handler.startDocument(_parser);
break;
}
return state;
}
catch (XmlPullParserException e)
{
throw new XMLException(XMLErrorCode.PARSE_ERROR, e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy