java核心技术卷2-2.4 使用XPath来定位信息

使用XPath来定位信息

2018年11月27日 星期二
下午1:45

假设有如下XML文档:



dbuser
secret

可以通过XPath表达式/configuration/database/username求值来得到database中的username的值。
使用XPath执行下列操作比普通的DOM方式要简单得多:
1. 获得文档节点
2. 枚举它的子元素
3. 定位database元素
4. 获取database元素的第一个子元素,即username元素。
5. 获取username元素的第一个子元素,即text节点。
6. 获取text节点中的数据。
XPath可以描述XML文档中的一个节点集,如:
/gridbag/row
描述了根元素gridbag的子元素中所有的row元素。可用[]操作符来选择特定元素:
/gridbag/row[1]
这表示的是第一行(索引号从1开始)。

使用@操作符可以得到属性值。XPath表达式:
/gridbag/row[1]/cell[1]/@anchor
描述了第一行第一个单元格的anchor属性。XPath表达式:
/gridbag/row/cell/@anchor
描述了作为根元素gridbag的子元素的那些row元素中的所有单元格的anchor属性节点。
XPath有很多有用的函数,如:
count(/gridbag/row)
返回gridbag根元素row子元素数量。

Java SE 5.0增加了一个API来计算XPath表达式,需要先从XPathFactory创建一个XPath对象:
XPathFactory xpfactory = XPathFactory.newInstance();
path = xpfactory.newXPath();
然后,调用evaluate方法来计算表达式:
String username = path.evaluate("/configuration/database/username",doc);
你可以用同样的XPath对象来计算多个表达式:
这种形式的evaluate方法将返回一个字符串。这很适合用来获取文本,比如前面的例子中的username节点中的文本。如果XPath表达式产生了一组节点,请做如下调用:
NodeList nodes = (NodeList) path.evaluate("/gridbag/row", doc, XPathConstants.NODESET);
如果结果只有一个节点,则以XPathConstants.NODE代替:
Node node = (Node) path.evaluate("/gridbag/row[1]", doc, XPathConstants.NODE);
如果结果是一个数字,则使用XPathConstants.NUMBER:
int count = (Number) path.evaluate(“count(/gridbag/row)”, doc, XPathConstants.NUMBER).int value();

不必从文档的根节点开始搜索,可以从任意一个节点或节点列表开始。例如,如果你有前一次计算得到的节点,那么就可以这样调用:
result = path.evaluate(expresstion, node);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值