我认为您对 XML 的实际外观有误。我相信你还必须有:
xmlns="www.example.com/xsd/"
在那里的某个地方,否则你的ABC
元素将在NO_NAMESPACE
命名空间中(ABC toString() 方法看起来像[Element:ABC]
:)
Element
因此,您的 XML 片段与 ABC 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 为空(这是相同的方式属性名称被扩展)。如果 QName 具有在表达式上下文中没有名称空间声明的前缀,则这是一个错误。