2015-08-26 32 views
1

數據我有它返回給定響應SOAP Web服務:檢索XML

<soap:Envelope xmlns:soap=""> 
<soap:Body> 
    <ns2:getRegisterValuesResponse xmlns:ns2=""> 
    <return> 
     <id>11931</id> 
     <value>0</value> 
    </return> 
    <return> 
     <id>11946</id> 
     <value>0</value> 
    </return> 
    <return> 
     <id>11961</id> 
     <value>0</value> 
    </return> 
    </ns2:getRegisterValuesResponse> 
</soap:Body> 
</soap:Envelope> 

如何取回Java方法中所給的整數?

這是我的方法。這個想法是用給定的ID和值每隔X分鐘更新一次數據庫。

public class RegisterLog implements Job { 

public void execute(final JobExecutionContext ctx) 
     throws JobExecutionException { 
    SimulatorSOAPClientSAAJ sc=new SimulatorSOAPClientSAAJ(); 
    SOAPMessage msg = sc.sOAPConnect(); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    try { 
     msg.writeTo(out); 
    } catch (SOAPException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    String strMsg = new String(out.toByteArray()); 
    System.out.println(strMsg); 

回答

1

使用DOM XML解析器http://www.w3schools.com/dom/default.asp

進口

import java.io.ByteArrayInputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.*; 

代碼

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
ByteArrayInputStream bais = new ByteArrayInputStream(out.toByteArray()); 
Document doc = dBuilder.parse(bais); 
doc.getDocumentElement().normalize(); 
NodeList nList = doc.getElementsByTagName("return"); 
for (int i=0;i<nList.getLength();i++) { 
    Node nNode = nList.item(i); 
    if (nNode.getNodeType() == Node.ELEMENT_NODE) { 
     Element curElement = (Element) nNode; 
     int id = Integer.parseInt(curElement.getElementsByTagName("id").item(0).getTextContent()); 
     String value = curElement.getElementsByTagName("value").item(0).getTextContent(); 
    } 
} 
+0

的偉大工程。豎起大拇指。 –

+0

@ PiotrCzapla,謝謝!愛幫忙。 – Kael53