2

我正在做这个小项目,我的任务是读取一个 xml 文件并解析它,以便它可以存储在一个类中。这是xml示例。它是用 SOAP 编写的,我想做的是得到

<ns2:getNewTokenResponse xmlns:ns2="http://abc.examples.com/">

这部分解析了子节点,以便我可以创建一个具有“nodeName”作为属性的类,其值为“getNewTokenResponse”。+会话密钥

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
    <env:Header>
    </env:Header>
    <env:Body>
        <ns2:getNewTokenResponse xmlns:ns2="http://abc.examples.com/">
            <return>
                {{session.key}}
            </return>
        </ns2:getNewTokenResponse>
    </env:Body>
</env:Envelope>

但我真正的问题是,我发现了很多很好的示例代码,命名空间没有前缀,xml 文件的结构可能会有所不同。所以在这里我很困惑以完成任务。我会很感激任何建议。干杯:D

4

1 回答 1

1

要在 Java 中使用命名空间进行 XPath 查询,我相信您需要执行以下操作:

XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setNamespaceContext(new NamespaceContext() {
    @Override
    public String getNamespaceURI(String prefix) {
        switch (prefix) {
            case "env":
                return "http://schemas.xmlsoap.org/soap/envelope/";
            case "ns2":
                return "http://abc.examples.com/";
        }

        return XMLConstants.NULL_NS_URI;
    }

    @Override
    public String getPrefix(String namespaceURI) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Iterator getPrefixes(String namespaceURI) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
});

Node getNewTokenResp = 
     (Node) xpath.evaluate("/env:Envelope/env:Body/ns2:getNewTokenResponse", 
     document, XPathConstants.NODE);

在创建解析文档之前,您还需要调用.setNamespaceAware(true);您的。DocumentBuilderFactoryDocumentBuilder

于 2013-01-18T06:27:54.227 回答