【问题标题】:SOAP Response paringSOAP 响应配对
【发布时间】:2015-07-19 06:57:21
【问题描述】:

我将以下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,然后再进行解析。

谁能告诉我如何实现这一目标?

谢谢

【问题讨论】:

  • 消息 XML,因此您可以使用various parsers 中的任何一个来获取内容。但是,为什么需要解析消息?有许多 Web 服务框架,例如 CXF,它们通过抽象出消息处理部分让您的生活更轻松。

标签: java soap xml-parsing


【解决方案1】:

您可以使用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);
    }
}

response.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

【讨论】:

  • 让我试试看它是否有效。 :) 不过,我真的需要指定我想从中获取哪些元素,比如,我只想要“firstName”。
  • 这就像一个魅力!我必须将我需要的字段添加到表达式中: String myField="firstName";字符串表达式 = "/Envelope/Body/getUserResponse/return/user/"+myField;
  • 然后就用这个-String expression = "/Envelope/Body/getUserResponse/return/user/firstName";
猜你喜欢
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多