XML が実際にどのように見えるかについて、あなたは間違っていると思います。私はあなたも持っている必要があると信じています:
xmlns="www.example.com/xsd/"
そうでなければ、あなたのABC
要素はNO_NAMESPACE
名前空間にあります(そして ABC toString() メソッドは次のようになります: [Element:ABC]
)
そのため、XML スニペットは ABC のElement
toString() 出力と一致しません。
質問を修正すると、XPath 式がどのように見えるべきかを提案しやすくなります。
編集、デフォルトの名前空間の追加の再定義があると私が正しいと仮定すると、次のJDOMを使用してABC
要素を取得できます。
XPathFactory xpf = XPathFactory.instance();
Namespace defns = Namespace.getNamespace("defns", "www.example.com/xsd/");
XPathExpression<Element> xpe = xpf.compile("//defns:ABC", Filters.element(), null, defns);
List<Element> abcs = xpe.evaluate(doc);
XPath 仕様からの次の抜粋を注意深く読む必要があります。
ノード テストの QName は、式コンテキストからの名前空間宣言を使用して展開名に展開されます。これは、xmlns で宣言されたデフォルトの名前空間が使用されないことを除いて、開始タグと終了タグの要素タイプ名に対して展開が行われるのと同じ方法です: QName にプレフィックスがない場合、名前空間 URI は null です (これは同じです)。属性名が展開される方法)。QName にプレフィックスがあり、式のコンテキストに名前空間宣言がない場合はエラーです。