我有一个简单的xml文档:
<Results>
<Result>
<Number>1</Number>
<Data>a</Data>
</Result>
<Result>
<Number>2</Number>
<Data>b</Data>
</Result>
</Results>
我正在尝试使用此代码获取每个结果的数据和数量:
XPathExpression resExpr = xpath
.compile("//Results/Result");
XPathExpression numExpr=xpath
.compile("//Result/Number");
XPathExpression dataExpr=xpath
.compile("//Result/Data");
NodeList nodeList = (NodeList) resExpr.evaluate(root_node,
XPathConstants.NODESET);
for (int i=0;i<nodeList.getLength();i++) {
Node result=nodeList.item(i);
if (result!=null) {
Node numNode=(Node) numExpr.evaluate(result,
XPathConstants.NODE);
Node dataNode=(Node) dataExpr.evaluate(result,
XPathConstants.NODE);
String data=dataNode.getTextContent());
String num=numNode.getTextContent());
}
}
但是,我在两次迭代中得到1 / a。似乎传递一个节点不会使xpath将它用作上下文,而是它正在查看整个树?
答案 0 :(得分:2)
这是因为您的xpath表达式以//
开头。这意味着从文档根开始搜索任何孩子。
要访问当前节点的子节点,请尝试.//
用于任何深度的子节点,或./
用于直接子节点。
或者,因为当前没有迭代的是结果,你可以使用:
XPathExpression numExpr=xpath
.compile("Number");
XPathExpression dataExpr=xpath
.compile("Data");