首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >axiom xpath addnamespace不起作用

axiom xpath addnamespace不起作用
EN

Stack Overflow用户
提问于 2015-08-12 22:34:40
回答 1查看 179关注 0票数 0

我已经创建了一个Axis2 web服务客户端。返回的响应为:

代码语言:javascript
复制
<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选择节点:

代码语言:javascript
复制
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表达式,如下所示:

代码语言:javascript
复制
xpath.addNamespace("y", "https://www.mycompany.net");
xpath.addNamespace("x", "https://www.mycompany.net/acXMLSchema.xsd");

并将xpath表达式更改为:

代码语言:javascript
复制
 AXIOMXPath xpath = new AXIOMXPath("/y:GetOpenPOsResponse/y:GetOpenPOsResult/x:acXML/x:Header/x:From/x:Company");

但是以这种方式选择节点将返回null。我已经看到了其他解决方案,这种方法应该可以工作,但我似乎不能让它为我工作。

我做错了什么??

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-08-13 01:40:47

当我将名称空间更正为"https://www.mycompany.net“时,它可以完美地工作--理应如此。我把"/“忘在最后了。

代码语言:javascript
复制
xpath.addNamespace("y", "https://www.mycompany.net/");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31968259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档