FileDocCategorySizeDatePackage
SAX2DOM.javaAPI DocJava SE 5 API6192Fri Aug 26 14:55:40 BST 2005com.sun.org.apache.xalan.internal.xsltc.trax

SAX2DOM

public class SAX2DOM extends Object implements LexicalHandler, Constants, ContentHandler
author
G. Todd Miller

Fields Summary
private Node
_root
private Document
_document
private Stack
_nodeStk
private Vector
_namespaceDecls
private Node
_lastSibling
Constructors Summary
public SAX2DOM()


        
	final DocumentBuilderFactory factory =
		DocumentBuilderFactory.newInstance();
	_document = factory.newDocumentBuilder().newDocument();
	_root = _document;
    
public SAX2DOM(Node root)

	_root = root;
	if (root instanceof Document) {
	  _document = (Document)root;
	}
	else if (root != null) {
	  _document = root.getOwnerDocument();
	}
	else {
	  final DocumentBuilderFactory factory =
		DocumentBuilderFactory.newInstance();
	  _document = factory.newDocumentBuilder().newDocument();
	  _root = _document;
	}
    
Methods Summary
public voidcharacters(char[] ch, int start, int length)

	final Node last = (Node)_nodeStk.peek();

        // No text nodes can be children of root (DOM006 exception)
        if (last != _document) {
            final String text = new String(ch, start, length);
            if( _lastSibling != null && _lastSibling.getNodeType() == Node.TEXT_NODE ){
                  ((Text)_lastSibling).appendData(text);
            }
            else{
                _lastSibling = last.appendChild(_document.createTextNode(text));
            }
        }
    
public voidcomment(char[] ch, int start, int length)
Lexical Handler method to create comment node in DOM tree.

	final Node last = (Node)_nodeStk.peek();
	Comment comment = _document.createComment(new String(ch,start,length));
	if (comment != null){
          last.appendChild(comment);
          _lastSibling = comment;
        }
    
public voidendCDATA()

 
public voidendDTD()

 
public voidendDocument()

        _nodeStk.pop();
    
public voidendElement(java.lang.String namespace, java.lang.String localName, java.lang.String qName)

	_nodeStk.pop();
        _lastSibling = null;
    
public voidendEntity(java.lang.String name)

 
public voidendPrefixMapping(java.lang.String prefix)

	// do nothing
    
public org.w3c.dom.NodegetDOM()

	return _root;
    
public voidignorableWhitespace(char[] ch, int start, int length)
This class is only used internally so this method should never be called.

    
public voidprocessingInstruction(java.lang.String target, java.lang.String data)
adds processing instruction node to DOM.

	final Node last = (Node)_nodeStk.peek();
	ProcessingInstruction pi = _document.createProcessingInstruction(
		target, data);
	if (pi != null){
          last.appendChild(pi);
          _lastSibling = pi;
        }
    
public voidsetDocumentLocator(org.xml.sax.Locator locator)
This class is only used internally so this method should never be called.

    
public voidskippedEntity(java.lang.String name)
This class is only used internally so this method should never be called.

    
public voidstartCDATA()

 
public voidstartDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)

 
public voidstartDocument()

	_nodeStk.push(_root);
    
public voidstartElement(java.lang.String namespace, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes attrs)

	final Element tmp = (Element)_document.createElementNS(namespace, qName);

	// Add namespace declarations first
	if (_namespaceDecls != null) {
	    final int nDecls = _namespaceDecls.size();
	    for (int i = 0; i < nDecls; i++) {
		final String prefix = (String) _namespaceDecls.elementAt(i++);

		if (prefix == null || prefix.equals(EMPTYSTRING)) {
		    tmp.setAttributeNS(XMLNS_URI, XMLNS_PREFIX,
			(String) _namespaceDecls.elementAt(i));
		}
		else {
		    tmp.setAttributeNS(XMLNS_URI, XMLNS_STRING + prefix,
			(String) _namespaceDecls.elementAt(i));
		}
	    }
	    _namespaceDecls.clear();
	}

	// Add attributes to element
	final int nattrs = attrs.getLength();
	for (int i = 0; i < nattrs; i++) {
	    if (attrs.getLocalName(i) == null) {
		tmp.setAttribute(attrs.getQName(i), attrs.getValue(i));
	    }
	    else {
		tmp.setAttributeNS(attrs.getURI(i), attrs.getQName(i),
		    attrs.getValue(i));
	    }
	}

	// Append this new node onto current stack node
	Node last = (Node)_nodeStk.peek();
	last.appendChild(tmp);

	// Push this node onto stack
	_nodeStk.push(tmp);
        _lastSibling = null;
    
public voidstartEntity(java.lang.String name)

 
public voidstartPrefixMapping(java.lang.String prefix, java.lang.String uri)

	if (_namespaceDecls == null) {
	    _namespaceDecls = new Vector(2);
	}
	_namespaceDecls.addElement(prefix);
	_namespaceDecls.addElement(uri);