【问题标题】:axiom xpath addnamespace not workingaxiom xpath addnamespace 不起作用
【发布时间】:2015-08-12 14:34:40
【问题描述】:

我创建了一个 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。我已经看到了其他解决方案,这种方法应该适用,但我似乎无法让它为我工作。
我做错了什么??

谢谢。

【问题讨论】:

    标签: xpath namespaces axis2 axiom


    【解决方案1】:

    当我更正“https://www.mycompany.net”的命名空间时,这非常有效。我忘记了最后的“/”。

    xpath.addNamespace("y", "https://www.mycompany.net/");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2012-09-08
      • 2014-04-21
      • 1970-01-01
      相关资源
      最近更新 更多