2016-04-24 73 views
1

我需要獲得SOAP響應的主體,但是主體有一個孩子,它是我需要的內容的父級,並且我不知道如何訪問這個孩子的身體。用JAVA切片SOAP響應

響應:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <ns2:consultaCEPResponse xmlns:ns2="http://cliente.bean.master.sigep.bsb.correios.com.br/"> 
      <return> 
       <bairro>Asa Norte</bairro> 
       <cep>70002900</cep> 
       <cidade>Brasilia</cidade> 
       <complemento /> 
       <complemento2 /> 
       <end>SBN Quadra 1 Bloco A</end> 
       <id>0</id> 
       <uf>DF</uf> 
      </return> 
     </ns2:consultaCEPResponse> 
    </soap:Body> 
</soap:Envelope> 

我要的是 「的Bairro」, 「CEP」, 「CIDADE」 等我用得到響應

代碼:

SOAPMessage rp = conn.call(msg, urlval); 

// I tried this, but didn't work 
//QName bodyName = new QName("http://cliente.bean.master.sigep.bsb.correios.com.br/", "consultaCEPResponse", "ns2"); 

Iterator itr = rp.getSOAPBody().getChildElements(bodyName); 
while (itr.hasNext()) { 
    Node node = (Node) itr.next(); 
    if (node.getNodeType() == Node.ELEMENT_NODE) { 
     Element ele = (Element) node; 
     System.out.println("\n" + ele.getNodeName() + " = " + ele.getTextContent()); 
    } 
} 
+0

你試圖讓 ...之間的一切?確切地說, –

+0

!這就是我需要的 –

+0

,包括? –

回答

0

我會用getElementsByTagName()來得到<return>元素,然後用getChildNodes()找到它的子元素()

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns2:consultaCEPResponse xmlns:ns2=\"http://cliente.bean.master.sigep.bsb.correios.com.br/\"><return><bairro>Asa Norte</bairro><cep>70002900</cep><cidade>Brasilia</cidade><complemento /><complemento2 /><end>SBN Quadra 1 Bloco A</end><id>0</id><uf>DF</uf></return></ns2:consultaCEPResponse></soap:Body></soap:Envelope>"; 
SOAPMessage rp = MessageFactory.newInstance().createMessage(null, new ByteArrayInputStream(xml.getBytes())); 

NodeList returnNodes = rp.getSOAPBody().getElementsByTagName("return"); 
if (returnNodes.getLength() == 1) { 
    Node returnNode = returnNodes.item(0); 
    NodeList elements = returnNode.getChildNodes(); 
    for (int i = 0; i < elements.getLength(); i++) { 
     Node node = elements.item(i); 
     System.out.println(node.getNodeName() + " = " + node.getTextContent()); 
    } 
} else { 
    // handle empty response case 
} 

輸出

bairro = Asa Norte 
cep = 70002900 
cidade = Brasilia 
complemento = 
complemento2 = 
end = SBN Quadra 1 Bloco A 
id = 0 
uf = DF