public synchronized void parse(InputStream is) throws MiniXMLException {
		automaton.reset();
		try {
			oTokenParser = new MiniXMLTokenParser(is);
		} catch (IOException e) {
			throw new MiniXMLException(MiniXMLException._MXMLE_TP_E_IE);
		}
		MiniXMLToken oMiniXMLToken;
		boolean bEnd = false;
		handler.startDocument();
		String data;
		do {
			oMiniXMLToken = oTokenParser.getToken();
			switch (oMiniXMLToken.getType()) {
			case MiniXMLTokenParser.tError:
				bEnd = true;
				break;
			case MiniXMLTokenParser.tComment:
				break;
			case MiniXMLTokenParser.tCharData:
				data = oMiniXMLToken.getValue().trim();
				if (data.length() > 0)
					handler.data(automaton.getStateInt(), data);
				// System.out.println("{" + oMiniXMLToken.getValue().trim() +
				// "}");
				break;
			case MiniXMLTokenParser.tTagBeg:
				getStartElement(oMiniXMLToken.getValue());
				break;
			case MiniXMLTokenParser.tEndTagBeg:
				getEndElement(oMiniXMLToken.getValue());
				break;
			case MiniXMLTokenParser.tXMLTagBeg:
				getXMLElement();
				break;
			// case MiniXMLTokenParser.tXMLTagEnd:
			// System.out.print("?>");
			// break;
			default:
				throw new MiniXMLException(
						MiniXMLException._MXMLE_TGE_UKNOWN_TOKEN);
			}
		} while (!bEnd);
		handler.endDocument(automaton.getStateInt());
	}