6

如何使用 xpath 获取所有帐户的名称?以下表达式仅返回第一个帐户名称:

XPathExpression fax = xpath.compile("/accounts/account/name")

<accounts>
<account>
<name>Johndoe1<name>
<account>
<account>
<name>Johndoe2<name>
<account>
</account>
4

3 回答 3

7

根据本教程:http ://www.ibm.com/developerworks/library/x-javaxpathapi/index.html你需要做这样的事情:

XPathExpression fax = xpath.compile("/accounts/account/name")
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
    System.out.println(nodes.item(i).getNodeValue()); 
}
于 2012-12-05T10:30:17.723 回答
1

这是正确的 XPath 表达式,但您获得的结果取决于您如何评估它。XPath 表达式/accounts/account/name返回一个节点集,其中包含(按文档顺序)文档中根元素下name所有元素的所有子元素。accountaccounts

在 XPath 数据模型中,节点集的字符串值被定义为集合中第一个节点的字符串值。因此,如果您使用单参数evaluate

fax.evaluate(someDocument)

这会将表达式评估为字符串,您将获得第一个name值。相反,您需要将表达式评估为节点集,然后依次提取每个节点的字符串值,如koopajah 的回答中所建议的那样。

于 2012-12-05T11:47:43.847 回答
0

尝试使用帐户//帐户,这将为您提供文档中的所有帐户标签,其后代是“帐户”

于 2012-12-05T10:30:52.590 回答