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 + -
显示快捷键?