setChanged(); notifyObservers(progress);
if(progress.changed()) { setChanged(); notifyObservers(progress); }
	public void startElement(String namespace, String name, String qname, Attributes attributes) {		ElementImpl last = null;		ElementImpl node = null;		if (!stack.empty()) {			last = (ElementImpl) stack.peek();			if (charBuf != null && charBuf.length() > 0) {				final String normalized = charBuf.getNormalizedString(normalize);				if (normalized.length() > 0) {					text.setData(normalized);					text.setOwnerDocument(document);					last.appendChildInternal(text);					if (!validate)						broker.store(text, currentPath.toString());					text.clear();				}			}			if (!usedElements.isEmpty()) {				node = (ElementImpl) usedElements.pop();				node.setNodeName(qname);			} else				node = new ElementImpl(qname);			last.appendChildInternal(node);		} else {			if (validate)				node = new ElementImpl(0, qname);			else				node = new ElementImpl(1, qname);			rootNode = node;			document.appendChild(node, validate);		}		node.setOwnerDocument(document);		node.setAttributes((short) attributes.getLength());		if (prefixes.size() > 0)			node.setPrefixes(prefixes);		stack.push(node);		currentPath.append('/').append(qname);		if (!validate			&& (broker.getDatabaseType() == DBBroker.DBM				|| broker.getDatabaseType() == DBBroker.NATIVE)) {			broker.store(node, currentPath.toString());		}		level++;		if (document.getMaxDepth() < level)			document.setMaxDepth(level);		int attrLength = attributes.getLength();		String attrQName;		String attrPrefix;		String attrNS;		for (int i = 0; i < attrLength; i++) {			attrNS = attributes.getURI(i);			attrQName = attributes.getQName(i);			// skip xmlns-attributes			if (attrQName.startsWith("xmlns"))				--attrLength;			else {				final AttrImpl attr = new AttrImpl(attrQName, attributes.getValue(i));				attr.setOwnerDocument(document);				if (attributes.getType(i).equals("ID"))					attr.setType(AttrImpl.ID);				node.appendChildInternal(attr);				if (!validate)					broker.store(attr, currentPath.toString());			}		}		if (attrLength > 0)			node.setAttributes((short) attrLength);		currentLine = locator.getLineNumber();		if (!validate) {			progress.setValue(currentLine);			setChanged();			notifyObservers(progress);		}		charBuf.setLength(0);		//		previousPath = currentPath;	}