java - SOAP 响应配对

标签 java soap xml-parsing

我将以下 SOAP 响应保存为内联字符串。我只是将其格式化以便于阅读:

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:getUserResponse xmlns:ns="http://www.cisco.com/AXL/API/10.0">
            <return>
                <user uuid="{SOME-IDENTIFIER-HERE}">
                    <firstName>MyFirstName</firstName>
                    <middleName />
                    <lastName>MyLastName</lastName>
                    <userid>myId</userid>
                    <password />
                    <pin />
                    <mailid>myEmail@myEmail.com</mailid>
                    <department />
                    <manager />
                    <userLocale />
                </user>
            </return>
        </ns:getUserResponse>
    </soapenv:Body>
</soapenv:Envelope>

我如何能够解析此内容并获取此响应中的特定元素值? 我正在考虑先将字符串转换为 XML,然后再进行解析。

任何人都可以阐明我如何实现这一目标吗?

谢谢

最佳答案

您可以使用XPath,例如下面

import java.io.File;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

public class XPathTest {

    public static void main(String[] args) throws XPathExpressionException, SAXException, IOException, ParserConfigurationException {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new File("response.xml"));
        XPath xxPath = XPathFactory.newInstance().newXPath();
        String expression = "/Envelope/Body/getUserResponse/return/user";
        javax.xml.xpath.XPathExpression cc = xxPath.compile(expression);
        String result  = cc.evaluate(doc);
        System.out.println("Result:: " + result);
    }
}

响应.xml

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body>
        <ns:getUserResponse xmlns:ns="http://www.cisco.com/AXL/API/10.0">
            <return>
                <user uuid="{SOME-IDENTIFIER-HERE}">
                    <firstName>MyFirstName</firstName>
                    <middleName />
                    <lastName>MyLastName</lastName>
                    <userid>myId</userid>
                    <password />
                    <pin />
                    <mailid>myEmail@myEmail.com</mailid>
                    <department />
                    <manager />
                    <userLocale />
                </user>
            </return>
        </ns:getUserResponse>
    </soapenv:Body>
</soapenv:Envelope>

输出:

Result:: 
                    MyFirstName

                    MyLastName
                    myId


                    myEmail@myEmail.com

关于java - SOAP 响应配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31498747/

相关文章:

java - Java 中的 MS Access 连接

wcf - 在 SOAP 消息中将复杂类型作为参数发送

java - 使用 Java/Jersey 作为 REST 和 SOAP 工作的 Web 服务

c# - 从同名节点获取值

c# - 将属性添加到现有的 XMLNodes

java - 前台服务意外停止

java - DerInputStream.getLength() : lengthTag=66

java - 使用java读取docx文档

java - JDK 1.8 和 java.xml.transform.Transformer 的问题

api - 列出支付资源