如何让Java XPath返回数字?Android测试场景下的实现疑问
问题解答
异常原因:你的XPath表达式写法有误。
/html/body/count(hr)是试图在<body>节点下查找名为count的子节点(并传入hr作为参数),这不符合XPath语法——count()是标准函数,不能作为路径节点的一部分,所以解析器会报错“Unknown nodetype: count”。Java XPath能否返回数字?:可以,JAXP(Java自带的XPath API)完全支持返回数值类型,而且Android平台的内置XML解析器也兼容这个功能,不需要依赖Saxon等第三方库。
正确实现方式:
- 修正XPath表达式:将函数放在最外层,正确写法为
count(/html/body/hr),用于统计<body>下所有<hr>节点的数量。 - 使用
XPath.evaluate()方法时,指定返回类型为XPathConstants.NUMBER,直接获取数值结果。
示例代码:
// 初始化XPath实例 XPath xpath = XPathFactory.newInstance().newXPath(); // 正确的统计表达式 String correctExpr = "count(/html/body/hr)"; // 执行表达式,指定返回数值类型 Double hrCount = (Double) xpath.evaluate(correctExpr, yourXmlDocument, XPathConstants.NUMBER); // 转换为整数用于断言 int hrCountInt = hrCount.intValue(); // 后续断言逻辑 // assertEquals(expectedCount, hrCountInt);- 修正XPath表达式:将函数放在最外层,正确写法为
Android适配说明:Android内置的
javax.xml.xpath包支持XPath 1.0的标准函数(包括count()),完全满足你的测试断言需求,不会破坏构建流程。
内容的提问来源于stack exchange,提问作者Phlip
相关产品推荐
相关产品推荐

