2015-06-22 69 views
0

我正在通过netbeans IDE生成的Web服务客户端调用Web服务方法。从java中的soap响应中获取值

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>的价值。

回答

1

如果您只需要这3个值,您可以去XPath。否则,DOM会读取整个文档。那些编写XPath expressions的人很容易直接读取节点读取值。

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

1

使用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(); 

这有没有异常处理,可能会打破,如果有具有相同名称的多个元素,但你应该能够从这里工作。

+0

我正在使用NetBeans IDE 7.3。当我使用getElementsByTagName(“”)它给我一个错误。 “找不到符号方法getElementsByTagName(String)” – dennypanther