Package client.net.sf.saxon.ce.trans

Source Code of client.net.sf.saxon.ce.trans.StringifyRuleSet

package client.net.sf.saxon.ce.trans;

import client.net.sf.saxon.ce.expr.XPathContext;
import client.net.sf.saxon.ce.expr.XPathContextMajor;
import client.net.sf.saxon.ce.expr.instruct.ApplyTemplates;
import client.net.sf.saxon.ce.expr.instruct.ParameterSet;
import client.net.sf.saxon.ce.expr.instruct.TailCall;
import client.net.sf.saxon.ce.om.Axis;
import client.net.sf.saxon.ce.om.NodeInfo;
import client.net.sf.saxon.ce.om.SequenceIterator;
import client.net.sf.saxon.ce.tree.util.SourceLocator;
import client.net.sf.saxon.ce.type.Type;

/**
*  The built-in rule set used for 1.0 and 2.0, which for document and element nodes does an apply-templates
*  to children, and for text nodes and attribute nodes copies the node.
*/
public class StringifyRuleSet implements BuiltInRuleSet {

    private static StringifyRuleSet THE_INSTANCE = new StringifyRuleSet();

    /**
     * Get the singleton instance of this class
     * @return the singleton instance
     */

    public static StringifyRuleSet getInstance() {
        return THE_INSTANCE;
    }

    private StringifyRuleSet() {};

    /**
     * Perform the built-in template action for a given node.
     * @param node         the node to be processed
     * @param parameters   the parameters supplied to apply-templates
     * @param tunnelParams the tunnel parameters to be passed through
     * @param context      the dynamic evaluation context
     * @param sourceLocator   location of the instruction (apply-templates, apply-imports etc) that caused
     *                     the built-in template to be invoked
     * @throws client.net.sf.saxon.ce.trans.XPathException
     *          if any dynamic error occurs
     */

    public void process(NodeInfo node, ParameterSet parameters,
                        ParameterSet tunnelParams, XPathContext context,
                        SourceLocator sourceLocator) throws XPathException {
        switch(node.getNodeKind()) {
            case Type.DOCUMENT:
            case Type.ELEMENT:
                SequenceIterator iter = node.iterateAxis(Axis.CHILD);
                XPathContextMajor c2 = context.newContext();
              TailCall tc = ApplyTemplates.applyTemplates(
                        iter, context.getCurrentMode(), parameters, tunnelParams, c2, sourceLocator);
                while (tc != null) {
                    tc = tc.processLeavingTail();
                }
              return;
          case Type.TEXT:
              // NOTE: I tried changing this to use the text node's copy() method, but
              // performance was worse
          case Type.ATTRIBUTE:
              context.getReceiver().characters(node.getStringValueCS());
              return;
          case Type.COMMENT:
          case Type.PROCESSING_INSTRUCTION:
          case Type.NAMESPACE:
              // no action
        }

    }
}

// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0.



TOP

Related Classes of client.net.sf.saxon.ce.trans.StringifyRuleSet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.