2

私はこの小さなプロジェクトを行っています。私のタスクは、xml ファイルを読み取って解析し、クラスに格納できるようにすることでした。xml の例を次に示します。それはSOAPで書かれており、私がやりたいのはgetです

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

この部分と子ノードを解析して、「getNewTokenResponse」の値を持つ属性として「nodeName」を持つクラスを作成できるようにしました。+セッションキー

<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 に答える