我将以下 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/