xpathですべてのアカウントの名前を取得するにはどうすればよいですか?次の式は、最初のアカウント名のみを返します。
XPathExpression fax = xpath.compile("/accounts/account/name")
<accounts>
<account>
<name>Johndoe1<name>
<account>
<account>
<name>Johndoe2<name>
<account>
</account>
このチュートリアルによると: 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());
}
これは正しい XPath 式ですが、得られる結果は評価方法によって異なります。XPath 式は、ドキュメントのルート要素の下にあるすべての要素のすべての子要素を (ドキュメント順に) 含むノード セット/accounts/account/name
を返します。name
account
accounts
XPath データ モデルでは、ノード セットの文字列値は、セット内の最初のノードの文字列値として定義されます。したがって、単一の引数を使用する場合evaluate
:
fax.evaluate(someDocument)
これにより、式が文字列として評価され、最初のname
値が取得されます。代わりに、 koopajah's answerで提案されているように、式をノード セットとして評価し、各ノードの文字列値を順番に抽出する必要があります。
accounts//account で試してください。これにより、ドキュメント内のすべてのアカウント タグが表示され、子孫は「accounts」です。