2017-02-14 14 views
0

Я задавался вопросом, как это было возможно, чтобы получить содержание ребенка тела ответа SOAP, когда ребенок тег выглядит следующим образом:Получить SOAP элемент по тэгу с пространством имен в Java

<sth:x>...</sth:x>

в документации Oracle I найдено, как loop all Elements with a specific name. Но поэтому мне нужно сначала создать элемент, который указывает имя тега, который я хочу найти.

Как создать элемент, похожий на один выше? Я знаю, как сделать такой вот так:

<sth:id sth="asdf"> 

Но это не работает. Вот сервер-ответ, который я пытаюсь прочитать.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <ns5:loginResponse xmlns:ns5="x"> 
      <ns5:id>Value I am looking for</ns5:id> 
      <ns5:rc>0</ns5:rc> 
     </ns5:loginResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

Спасибо за вашу помощь :)

ответ

1

Попробуйте это.

String xml = "YourXMl"   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setNamespaceAware(true); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
InputSource is = new InputSource(new StringReader(xml)); 
Document doc = builder.parse(is); 
NodeList nodes = doc.getDocumentElement().getElementsByTagNameNS("x","id"); 
System.err.println(nodes.item(0).getChildNodes().item(0).getNodeValue()); 

Есть две важные вещи factory.setNamespaceAware(true); - чтобы включить поддержку пространств имен XML. doc.getDocumentElement().getElementsByTagNameNS("x","id"); Чтобы получить элемент с использованием пространства имен uri и имени элемента. И вот <ns5:loginResponse xmlns:ns5="x"> Объявление пространства имен uri. x is uri ns5 - пространство имен.

+0

Я пытался, но я получаю следующее сообщение об ошибке: 'org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Содержимое не разрешено в прологе. Также вы знаете способ прочитать ответ с использованием SOAP API? –

0

Я нашел ответ:

данный элемент был в другом SOAPBodyElement. Так перекручивание через оба элемента дал мне правильное значение:

body = reply.getSOAPBody(); 
Iterator replyIt = body.getChildElements(); 

while(replyIt.hasNext()){ 
    SOAPBodyElement replysbe = (SOAPBodyElement) replyIt.next(); 
    Iterator replyIt2 = replysbe.getChildElements(); 
    SOAPElement sentSE = (SOAPElement) replyIt2.next(); 
    sessionID = sentSE.getValue(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^