我创建了一个 Axis2 Web 服务客户端。返回的响应是:
<GetOpenPOsResponse xmlns="https://www.mycompany.net/">
<GetOpenPOsResult>
<acXML xmlns="https://www.mycompany.net/acXMLSchema.xsd" lang="en-us">
<Header>
<From>
<Company>Company Name</Company>
<Identity>Id</Identity>
<DatabaseName>Database</DatabaseName>
</From>
</Header>
<Request/>
</acXML>
</GetOpenPOsResult>
如果我使用以下命令,我可以通过 xpath 选择节点:
OMElement result = sender.sendReceive();
StAXOMBuilder builder = new StAXOMBuilder(result.getXMLStreamReader());
OMElement root = builder.getDocumentElement();
AXIOMXPath xpath = new AXIOMXPath("/*[name()='GetOpenPOsResponse']/*[name()='GetOpenPOsResult']/*[name()='acXML']/*[name()='Header']/*[name()='From']/*[name()='Company']");
OMElement selectedNode = (OMElement) xpath.selectSingleNode(root);
System.out.println(selectedNode.getText());
这将返回:公司名称
但我想使用命名空间来简化 xpath 表达式,如下所示:
xpath.addNamespace("y", "https://www.mycompany.net");
xpath.addNamespace("x", "https://www.mycompany.net/acXMLSchema.xsd");
并将 xpath 表达式更改为:
AXIOMXPath xpath = new AXIOMXPath("/y:GetOpenPOsResponse/y:GetOpenPOsResult/x:acXML/x:Header/x:From/x:Company");
但是以这种方式选择节点会返回 null。我已经看到了这种方法应该适用的其他解决方案,但我似乎无法让它为我工作。
我究竟做错了什么??
谢谢你。