com.marklogic.developer.corb.StreamingXPath Maven / Gradle / Ivy
/*
* * Copyright (c) 2004-2019 MarkLogic Corporation
* *
* * Licensed under the Apache License, Version 2.0 (the "License");
* * you may not use this file except in compliance with the License.
* * You may obtain a copy of the License at
* *
* * http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS,
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* * See the License for the specific language governing permissions and
* * limitations under the License.
* *
* * The use of the Apache License does not indicate that this project is
* * affiliated with the Apache Software Foundation.
*/
package com.marklogic.developer.corb;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Compiles an XPath expression into a regex pattern that is used to evaluate
* matches for an XPath. To be used by a streaming parser, such as SAX or StAX,
* in order to evaluate a limited subset of XPath expressions for selection of nodes.
*
* @author Mads Hansen, MarkLogic Corporation
* @since 2.4.0
*/
public class StreamingXPath {
public static final String SLASH = "/";
public static final String DOUBLE_SLASH = SLASH + SLASH;
public static final String STAR = "*";
public static final String CHILD_AXIS = "child::";
public static final String DESCENDANT_AXIS = "descendant::";
public static final String SELF_AXIS = "self::";
private Pattern regexPath;
private Pattern localNamePattern = Pattern.compile(".*?((?