我已经创建了一个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。我已经看到了其他解决方案,这种方法应该可以工作,但我似乎不能让它为我工作。
我做错了什么??
谢谢。
发布于 2015-08-13 01:40:47
当我将名称空间更正为"https://www.mycompany.net“时,它可以完美地工作--理应如此。我把"/“忘在最后了。
xpath.addNamespace("y", "https://www.mycompany.net/");https://stackoverflow.com/questions/31968259
复制相似问题