XPath API的使用
XPath表达式比繁琐的文档对象模型(DOM)代码要容易编写得多。如果需要从XML文档中提取信息,最快捷、最简单的办法就是在Java程序中嵌入XPath表达式。在Java版本中推出了javax.xml.xpath包,这是一个用于XPath文档查询的独立于XML对象模型的库。
XPath API的常用类及接口如下:
XPath 接口
XPathFactory类
XPathVariableResolver接口和XPathFunctionResolver接口
XPathExpression接口
XPathVariableResolver接口和XPathFunctionResolver接口主要用于在程序中定义和使用XPath的扩展函数,一般不常使用。
XPathFactory类
XPathFactory实例可用于创建XPath对象。该类只有一个受保护的空构造方法,常用的方法主要有以下几种:
abstract void setXPathFunctionResolver(XPathFunctionResolver resolver):建立默认函数解析器。
static XPathFactory newInstance( ):获取使用默认对象模型(DOM)的新XPathFactory 实例。
abstract void setXPathVariableResolver(XPathVariableResolver resolver):建立默认变量解析器。
abstract boolean isObjectModelSupported(String objectModel):此XPathFactory是否支持指定的对象模型。
在实际应用中经常会使用的newInstance( )静态方法来获得一个该类的实例,
XPath 接口
提供了对XPath计算环境和表达式的访问。XPath对象不是线程安全的,也不能重复载入。也就是说应用程序负责确保在任意给定时间内不能有多个线程使用一个XPath对象。
常用方法有以下几种 :
void reset():将此XPath重置为其初始配置。
XPathExpression compile(String expression):编译XPath表达式。
void setXPathFunctionResolver(XPathFunctionResolver resolver):建立函数解析器。
void setNamespaceContext(NamespaceContext nsContext):建立名称空间上下文。
void setXPathVariableResolver(XPathVariableResolver resolver):建立变量解析器。
XPathExpression接口
XPathExpression接口提供了对编译后的XPath表达式的访问。如果表达式包含变量,则其值将通过XPathVariableResolver()方法找到,如果变量解析器未定义或解析器返回null,将会抛出异常。如果表达式包含函数引用,则函数将通过XPathFunctionResolver()方法找到。如果函数解析器未定义或解析器为函数返回null,将会抛出异常。
该接口最长用的方法是evaluate()方法,如下:
String evaluate(InputSource source):计算指定InputSource编译后的XPath表达式并将结果以字符串形式返回。
String evaluate(Object item):计算指定编译后的XPath表达式并以字符串形式返回。
Object evaluate(Object item, QName returnType): 计算指定的XPath表达式并返回指定类型的结果。
Object evaluate(InputSource source, QName returnType):计算指定InputSource编译后的XPath表达式并返回指定类型的结果。
XPath API的使用示例
import javax.xml.parsers.*;
import javax.xml.xpath.*;
import org.w3c.dom.*;
public class TestXpath2{
public static void main(String[ ] args)throws Exception{
DocumentBuilderFactory domFactory=
DocumentBuilderFactory.newInstance( );
DocumentBuilder builder=domFactory.newDocumentBuilder( );
Document doc=builder.parse("cdcatalog.xml");
//获取一个XPathFactory实例
XPathFactory factory = XPathFactory.newInstance( );
XPath xpath = factory.newXPath( );
//使用XPath函数
XPathExpression expr= xpath.compile("sum(//cd/price)");
String result =expr.evaluate(doc);
System.out.println(result);
}
}
在XPath表达式中使用XPath函数库的sum()函数。
XPath的数据类型
XPath 1.0只有四种基本的数据类型:
number(数值型)
node-set(节点型)
boolean(布尔型)
string(字符串型)
XPath的数据类型在Java中的对应关系如下表:
在计算XPath表达式时,使用XPathExpression接口的evaluate()方法。该方法可以有两个参数。其中第二个参数就是用于指定需要的返回类型,该参数的值都是在XPathConstants中已经命名的静态字段。如下:
XPathConstants.BOOLEAN
XPathConstants.NODESET
XPathConstants.NUMBER
XPathConstants.STRING
XPathConstants.STRING
XPathConstants.NODE并没有匹配的XPath类型,它主要适用于当XPath表达式的结果有且只有一个节点。如果XPath表达式返回了多个节点,却指定类型为XPathConstants.NODE,则evaluate()方法将按照文档顺序返回第一个节点。如果XPath表达式的结果为一个空集,却指定类型为XPathConstants.NODE,则evaluate( )方法将返回null。
XPath API的使用 常用类及接口
最新推荐文章于 2024-04-07 08:00:00 发布