从 java 中的 soap 响应中获取值
get values from soap response in java
我正在通过 netbeans IDE 生成的 Web 服务客户端调用 Web 服务方法。
private String getCitiesByCountry(java.lang.String countryName) {
webService.GlobalWeatherSoap port = service.getGlobalWeatherSoap();
return port.getCitiesByCountry(countryName);
}
所以我在我的程序中调用了这个方法,
String b = getWeather("Katunayake", "Sri Lanka");
它会给我一个包含 xml 数据的字符串输出。
String b = getWeather("Katunayake", "Sri Lanka"); = (java.lang.String) <?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
<Location>Katunayake, Sri Lanka (VCBI) 07-10N 079-53E 8M</Location>
<Time>Jun 22, 2015 - 06:10 AM EDT / 2015.06.22 1010 UTC</Time>
<Wind> from the SW (220 degrees) at 10 MPH (9 KT):0</Wind>
<Visibility> greater than 7 mile(s):0</Visibility>
<SkyConditions> partly cloudy</SkyConditions>
<Temperature> 86 F (30 C)</Temperature>
<DewPoint> 77 F (25 C)</DewPoint>
<RelativeHumidity> 74%</RelativeHumidity>
<Pressure> 29.74 in. Hg (1007 hPa)</Pressure>
<Status>Success</Status>
</CurrentWeather>
如何获取 <Location>,<SkyConditions>,<Temperature>
的值。
一种方法是使用 DOM 解析器,以 http://examples.javacodegeeks.com/core-java/xml/java-xml-parser-tutorial 为指导:
String b = getWeather("Katunayake", "Sri Lanka");
InputStream weatherAsStream = new ByteArrayInputStream(b.getBytes(StandardCharsets.UTF_8));
DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fac.newDocumentBuilder();
org.w3c.dom.Document weatherDoc = builder.parse(weatherAsStream);
String location = weatherDoc.getElementsByTagName("Location").item(0).getTextContent();
String skyConditions = weatherDoc.getElementsByTagName("SkyConditions").item(0).getTextContent();
String temperature = weatherDoc.getElementsByTagName("Temperature").item(0).getTextContent();
这没有异常处理,如果有多个同名元素可能会中断,但您应该可以从这里开始工作。
如果您只需要这 3 个值,您可以选择 XPath
。否则,DOM
读取整个文档。写XPath expressions
那些直接fetch节点读取值是很容易的。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
String xml = ...; // <-- The XML SOAP response
Document xmlDocument = builder.parse(new ByteArrayInputStream(xml.getBytes()));
XPath xPath = XPathFactory.newInstance().newXPath();
String location = xPath.compile("/CurrentWeather/Location").evaluate(xmlDocument);
String skyCond = xPath.compile("/CurrentWeather/SkyConditions").evaluate(xmlDocument);
String tmp = xPath.compile("/CurrentWeather/Temperature").evaluate(xmlDocument);
如果,您需要获取许多 XML 个节点并且需要频繁获取,则选择 DOM
。
我正在通过 netbeans IDE 生成的 Web 服务客户端调用 Web 服务方法。
private String getCitiesByCountry(java.lang.String countryName) {
webService.GlobalWeatherSoap port = service.getGlobalWeatherSoap();
return port.getCitiesByCountry(countryName);
}
所以我在我的程序中调用了这个方法,
String b = getWeather("Katunayake", "Sri Lanka");
它会给我一个包含 xml 数据的字符串输出。
String b = getWeather("Katunayake", "Sri Lanka"); = (java.lang.String) <?xml version="1.0" encoding="utf-16"?>
<CurrentWeather>
<Location>Katunayake, Sri Lanka (VCBI) 07-10N 079-53E 8M</Location>
<Time>Jun 22, 2015 - 06:10 AM EDT / 2015.06.22 1010 UTC</Time>
<Wind> from the SW (220 degrees) at 10 MPH (9 KT):0</Wind>
<Visibility> greater than 7 mile(s):0</Visibility>
<SkyConditions> partly cloudy</SkyConditions>
<Temperature> 86 F (30 C)</Temperature>
<DewPoint> 77 F (25 C)</DewPoint>
<RelativeHumidity> 74%</RelativeHumidity>
<Pressure> 29.74 in. Hg (1007 hPa)</Pressure>
<Status>Success</Status>
</CurrentWeather>
如何获取 <Location>,<SkyConditions>,<Temperature>
的值。
一种方法是使用 DOM 解析器,以 http://examples.javacodegeeks.com/core-java/xml/java-xml-parser-tutorial 为指导:
String b = getWeather("Katunayake", "Sri Lanka");
InputStream weatherAsStream = new ByteArrayInputStream(b.getBytes(StandardCharsets.UTF_8));
DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fac.newDocumentBuilder();
org.w3c.dom.Document weatherDoc = builder.parse(weatherAsStream);
String location = weatherDoc.getElementsByTagName("Location").item(0).getTextContent();
String skyConditions = weatherDoc.getElementsByTagName("SkyConditions").item(0).getTextContent();
String temperature = weatherDoc.getElementsByTagName("Temperature").item(0).getTextContent();
这没有异常处理,如果有多个同名元素可能会中断,但您应该可以从这里开始工作。
如果您只需要这 3 个值,您可以选择 XPath
。否则,DOM
读取整个文档。写XPath expressions
那些直接fetch节点读取值是很容易的。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
String xml = ...; // <-- The XML SOAP response
Document xmlDocument = builder.parse(new ByteArrayInputStream(xml.getBytes()));
XPath xPath = XPathFactory.newInstance().newXPath();
String location = xPath.compile("/CurrentWeather/Location").evaluate(xmlDocument);
String skyCond = xPath.compile("/CurrentWeather/SkyConditions").evaluate(xmlDocument);
String tmp = xPath.compile("/CurrentWeather/Temperature").evaluate(xmlDocument);
如果,您需要获取许多 XML 个节点并且需要频繁获取,则选择 DOM
。