package org.fcrepo.utilities.xml; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * <p>Interface for doing efficient XPath selections. To obtain an implementation * of this interface use {@link DOM#createXPathSelector(String[])}. * </p> * Note that your DOM must be constructed with namespaces explicitly enabled * for a namespace aware selector to work properly. You do this either via * the {@link DOM#streamToDOM(java.io.InputStream , boolean)} or * {@link DOM#stringToDOM(String, boolean)} methods or by calling * {@code setNamespaceAware(true)} on your {@code DocumentBuilderFactory}. */ public interface XPathSelector { /** * Extract an integer value from {@code node} or return {@code defaultValue} * if it is not found. * * @param node the node with the wanted attribute. * @param xpath the XPath to extract. * @param defaultValue the default value. * @return the value of the path, if existing, else * defaultValue */ public Integer selectInteger(Node node, String xpath, Integer defaultValue); /** * Extract an integer value from {@code node} or return {@code null} if it * is not found * * @param node the node with the wanted attribute. * @param xpath the XPath to extract. * @return the value of the path or {@code null} */ public Integer selectInteger(Node node, String xpath); /** * Extract a double precision floating point value from {@code node} or * return {@code defaultValue} if it is not found * * @param node the node with the wanted attribute. * @param xpath the XPath to extract. * @param defaultValue the default value. * @return the value of the path, if existing, else * defaultValue */ public Double selectDouble(Node node, String xpath, Double defaultValue); /** * Extract a double precision floating point value from {@code node} or * return {@code null} if it is not found * * @param node the node with the wanted attribute. * @param xpath the XPath to extract. * @return the value of the path or {@code null} */ public Double selectDouble(Node node, String xpath); /** * Extract a boolean value from {@code node} or return {@code defaultValue} * if there is no boolean value at {@code xpath} * * @param node the node with the wanted attribute. * @param xpath the path to extract. * @param defaultValue the default value. * @return the value of the path, if existing, else * {@code defaultValue} */ public Boolean selectBoolean(Node node, String xpath, Boolean defaultValue); /** * Extract a boolean value from {@code node} or return {@code false} * if there is no boolean value at {@code xpath} * * @param node the node with the wanted attribute. * @param xpath the path to extract. * @return the value of the path, if existing, else * {@code false} */ public Boolean selectBoolean(Node node, String xpath); /** * <p>Extract the given value from the node as a String or if the value cannot * be extracted, {@code defaultValue} is returned. * </p><p> * Example: To get the value of the attribute "foo" in the node, specify * "@foo" as the path. * </p> * Note: This method does not handle namespaces explicitely. * * @param node the node with the wanted attribute * @param xpath the XPath to extract. * @param defaultValue the default value * @return the value of the path, if existing, else * {@code defaultValue} */ public String selectString(Node node, String xpath, String defaultValue); /** * <p>Extract the given value from the node as a String or if the value cannot * be extracted, the empty string is returned * </p><p> * Example: To get the value of the attribute "foo" in the node, specify * "@foo" as the path. *</p> * Note: This method does not handle namespaces explicitely. * * @param node the node with the wanted attribute * @param xpath the XPath to extract * @return the value of the path, if existing, else * the empty string */ public String selectString(Node node, String xpath); /** * <p>Select the Node list with the given XPath. * </p><p> * Note: This is a convenience method that logs exceptions instead of * throwing them. * </p> * @param node the root document. * @param xpath the xpath for the Node list. * @return the NodeList requested or an empty NodeList if unattainable */ public NodeList selectNodeList(Node node, String xpath); /** * <p>Select the Node with the given XPath. * </p><p> * Note: This is a convenience method that logs exceptions instead of * throwing them. * </p> * @param dom the root document. * @param xpath the xpath for the node. * @return the Node or null if unattainable. */ public Node selectNode(Node dom, String xpath); }