treewalker.java

来自「java jdk 1.4的源码」· Java 代码 · 共 524 行 · 第 1/2 页

JAVA
524
字号
/* * The Apache Software License, Version 1.1 * * * Copyright (c) 1999 The Apache Software Foundation.  All rights  * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment:   *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xalan" and "Apache Software Foundation" must *    not be used to endorse or promote products derived from this *    software without prior written permission. For written  *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    nor may "Apache" appear in their name, without prior written *    permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation and was * originally based on software copyright (c) 1999, Lotus * Development Corporation., http://www.lotus.com.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */package org.apache.xml.utils;import org.w3c.dom.*;import org.xml.sax.*;import org.xml.sax.ext.LexicalHandler;import org.xml.sax.helpers.LocatorImpl;import org.apache.xpath.DOM2Helper;import org.apache.xpath.DOMHelper;import org.apache.xml.utils.NodeConsumer;/** * <meta name="usage" content="advanced"/> * This class does a pre-order walk of the DOM tree, calling a ContentHandler * interface as it goes. */public class TreeWalker{  /** Local reference to a ContentHandler          */  private ContentHandler m_contentHandler = null;  // ARGHH!!  JAXP Uses Xerces without setting the namespace processing to ON!  // DOM2Helper m_dh = new DOM2Helper();  /** DomHelper for this TreeWalker          */  protected DOMHelper m_dh;                /** Locator object for this TreeWalker          */        private LocatorImpl m_locator = new LocatorImpl();  /**   * Get the ContentHandler used for the tree walk.   *   * @return the ContentHandler used for the tree walk   */  public ContentHandler getContentHandler()  {    return m_contentHandler;  }  /**   * Get the ContentHandler used for the tree walk.   *   * @return the ContentHandler used for the tree walk   */  public void setContentHandler(ContentHandler ch)  {    m_contentHandler = ch;  }                /**   * Constructor.   * @param   contentHandler The implemention of the   * @param   systemId System identifier for the document.   * contentHandler operation (toXMLString, digest, ...)   */  public TreeWalker(ContentHandler contentHandler, DOMHelper dh, String systemId)  {    this.m_contentHandler = contentHandler;                m_contentHandler.setDocumentLocator(m_locator);                if (systemId != null)                  m_locator.setSystemId(systemId);                else {                  try {                    m_locator.setSystemId(System.getProperty("user.dir"));                  }                  catch (SecurityException se) {// user.dir not accessible from applet                    m_locator.setSystemId("");                  }                }    m_dh = dh;  }  /**   * Constructor.   * @param   contentHandler The implemention of the   * contentHandler operation (toXMLString, digest, ...)   */  public TreeWalker(ContentHandler contentHandler, DOMHelper dh)  {    this.m_contentHandler = contentHandler;    m_contentHandler.setDocumentLocator(m_locator);    try {      m_locator.setSystemId(System.getProperty("user.dir"));    }     catch (SecurityException se){// user.dir not accessible from applet      m_locator.setSystemId("");    }    m_dh = dh;  }    /**   * Constructor.   * @param   contentHandler The implemention of the   * contentHandler operation (toXMLString, digest, ...)   */  public TreeWalker(ContentHandler contentHandler)  {    this.m_contentHandler = contentHandler;                if (m_contentHandler != null)                        m_contentHandler.setDocumentLocator(m_locator);                try {                  m_locator.setSystemId(System.getProperty("user.dir"));                }                 catch (SecurityException se){// user.dir not accessible from applet                  m_locator.setSystemId("");    }    m_dh = new org.apache.xpath.DOM2Helper();  }  /**   * Perform a pre-order traversal non-recursive style.     *   * Note that TreeWalker assumes that the subtree is intended to represent    * a complete (though not necessarily well-formed) document and, during a    * traversal, startDocument and endDocument will always be issued to the    * SAX listener.   *     * @param pos Node in the tree where to start traversal   *   * @throws TransformerException   */  public void traverse(Node pos) throws org.xml.sax.SAXException  {   	this.m_contentHandler.startDocument();    Node top = pos;    while (null != pos)    {      startNode(pos);      Node nextNode = pos.getFirstChild();      while (null == nextNode)      {        endNode(pos);        if (top.equals(pos))          break;        nextNode = pos.getNextSibling();        if (null == nextNode)        {          pos = pos.getParentNode();          if ((null == pos) || (top.equals(pos)))          {            if (null != pos)              endNode(pos);            nextNode = null;            break;          }        }      }      pos = nextNode;    }    this.m_contentHandler.endDocument();  }  /**   * Perform a pre-order traversal non-recursive style.   * Note that TreeWalker assumes that the subtree is intended to represent    * a complete (though not necessarily well-formed) document and, during a    * traversal, startDocument and endDocument will always be issued to the    * SAX listener.   *   * @param pos Node in the tree where to start traversal   * @param top Node in the tree where to end traversal   *   * @throws TransformerException   */  public void traverse(Node pos, Node top) throws org.xml.sax.SAXException  {	this.m_contentHandler.startDocument();	    while (null != pos)    {      startNode(pos);      Node nextNode = pos.getFirstChild();      while (null == nextNode)      {        endNode(pos);        if ((null != top) && top.equals(pos))          break;        nextNode = pos.getNextSibling();        if (null == nextNode)        {          pos = pos.getParentNode();          if ((null == pos) || ((null != top) && top.equals(pos)))

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?