📄 xpath.java
字号:
/** * Returns the string value of the first node selected by applying * the wrapped XPath expression to the given context. * * @param context the element to use as context for evaluating * the XPath expression. * * @return the string value of the first node selected by applying * the wrapped XPath expression to the given context. * * @throws JDOMException if the XPath expression is invalid or * its evaluation on the specified context * failed. */ abstract public String valueOf(Object context) throws JDOMException; /** * Returns the number value of the first node selected by applying * the wrapped XPath expression to the given context. * * @param context the element to use as context for evaluating * the XPath expression. * * @return the number value of the first node selected by applying * the wrapped XPath expression to the given context, * <code>null</code> if no node was selected or the * special value {@link java.lang.Double#NaN} * (Not-a-Number) if the selected value can not be * converted into a number value. * * @throws JDOMException if the XPath expression is invalid or * its evaluation on the specified context * failed. */ abstract public Number numberValueOf(Object context) throws JDOMException; /** * Defines an XPath variable and sets its value. * * @param name the variable name. * @param value the variable value. * * @throws IllegalArgumentException if <code>name</code> is not * a valid XPath variable name * or if the value type is not * supported by the underlying * implementation */ abstract public void setVariable(String name, Object value); /** * Adds a namespace definition to the list of namespaces known of * this XPath expression. * <p> * <strong>Note</strong>: In XPath, there is no such thing as a * 'default namespace'. The empty prefix <b>always</b> resolves * to the empty namespace URI.</p> * * @param namespace the namespace. */ abstract public void addNamespace(Namespace namespace); /** * Adds a namespace definition (prefix and URI) to the list of * namespaces known of this XPath expression. * <p> * <strong>Note</strong>: In XPath, there is no such thing as a * 'default namespace'. The empty prefix <b>always</b> resolves * to the empty namespace URI.</p> * * @param prefix the namespace prefix. * @param uri the namespace URI. * * @throws IllegalNameException if the prefix or uri are null or * empty strings or if they contain * illegal characters. */ public void addNamespace(String prefix, String uri) { addNamespace(Namespace.getNamespace(prefix, uri)); } /** * Returns the wrapped XPath expression as a string. * * @return the wrapped XPath expression as a string. */ abstract public String getXPath(); /** * Evaluates an XPath expression and returns the list of selected * items. * <p> * <strong>Note</strong>: This method should not be used when the * same XPath expression needs to be applied several times (on the * same or different contexts) as it requires the expression to be * compiled before being evaluated. In such cases, * {@link #newInstance allocating} an XPath wrapper instance and * {@link #selectNodes(java.lang.Object) evaluating} it several * times is way more efficient. * </p> * * @param context the node to use as context for evaluating * the XPath expression. * @param path the XPath expression to evaluate. * * @return the list of selected items, which may be of types: {@link Element}, * {@link Attribute}, {@link Text}, {@link CDATA}, * {@link Comment}, {@link ProcessingInstruction}, Boolean, * Double, or String. * * @throws JDOMException if the XPath expression is invalid or * its evaluation on the specified context * failed. */ public static List selectNodes(Object context, String path) throws JDOMException { return newInstance(path).selectNodes(context); } /** * Evaluates the wrapped XPath expression and returns the first * entry in the list of selected nodes (or atomics). * <p> * <strong>Note</strong>: This method should not be used when the * same XPath expression needs to be applied several times (on the * same or different contexts) as it requires the expression to be * compiled before being evaluated. In such cases, * {@link #newInstance allocating} an XPath wrapper instance and * {@link #selectSingleNode(java.lang.Object) evaluating} it * several times is way more efficient. * </p> * * @param context the element to use as context for evaluating * the XPath expression. * @param path the XPath expression to evaluate. * * @return the first selected item, which may be of types: {@link Element}, * {@link Attribute}, {@link Text}, {@link CDATA}, * {@link Comment}, {@link ProcessingInstruction}, Boolean, * Double, String, or <code>null</code> if no item was selected. * * @throws JDOMException if the XPath expression is invalid or * its evaluation on the specified context * failed. */ public static Object selectSingleNode(Object context, String path) throws JDOMException { return newInstance(path).selectSingleNode(context); } //------------------------------------------------------------------------- // Serialization support //------------------------------------------------------------------------- /** * <i>[Serialization support]</i> Returns the alternative object * to write to the stream when serializing this object. This * method returns an instance of a dedicated nested class to * serialize XPath expressions independently of the concrete * implementation being used. * <p> * <strong>Note</strong>: Subclasses are not allowed to override * this method to ensure valid serialization of all * implementations.</p> * * @return an XPathString instance configured with the wrapped * XPath expression. * * @throws ObjectStreamException never. */ protected final Object writeReplace() throws ObjectStreamException { return new XPathString(this.getXPath()); } /** * The XPathString is dedicated to serialize instances of * XPath subclasses in a implementation-independent manner. * <p> * XPathString ensures that only string data are serialized. Upon * deserialization, XPathString relies on XPath factory method to * to create instances of the concrete XPath wrapper currently * configured.</p> */ private final static class XPathString implements Serializable { /** * The XPath expression as a string. */ private String xPath = null; /** * Creates a new XPathString instance from the specified * XPath expression. * * @param xpath the XPath expression. */ public XPathString(String xpath) { super(); this.xPath = xpath; } /** * <i>[Serialization support]</i> Resolves the read XPathString * objects into XPath implementations. * * @return an instance of a concrete implementation of * XPath. * * @throws ObjectStreamException if no XPath could be built * from the read object. */ private Object readResolve() throws ObjectStreamException { try { return XPath.newInstance(this.xPath); } catch (JDOMException ex1) { throw new InvalidObjectException( "Can't create XPath object for expression \"" + this.xPath + "\": " + ex1.toString()); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -