0

我有一个简单的 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 将它用作上下文,而是它正在查看整个树?

4

1 回答 1

2

这是因为您的 xpath 表达式以//. 这意味着从文档根目录开始搜索任何孩子。要访问当前节点的子节点,请尝试 .//任何深度的子节点或./直接子节点。

或者,因为当前不在迭代中的是 Result 您可以使用:

XPathExpression numExpr=xpath
        .compile("Number");
XPathExpression dataExpr=xpath
        .compile("Data");
于 2013-06-16T20:08:30.153 回答