2015-07-06 4 views
-1

Я получаю ответ XML от службы останова Java. Может ли кто-нибудь получить статус информацию о теге?Анализ XML из службы ответа службы отдыха

<operation name="EDIT_REQUEST"> 
<result> 
<status>Failed</status> 
<message>Error when editing request details - Request Closing Rule Violation. Request cannot be Resolved</message> 
</result> 
</operation> 
+2

Это обычная проблема синтаксического анализа xml, вы еще что-нибудь пробовали? –

+0

Посмотрите на это: http://stackoverflow.com/questions/19396834/dom-xml-parser-example – Garry

+1

Вы можете начать с поиска «как разобрать xml в Java», на ваш вопрос действительно не хватает усилий для исследования – gerrytan

ответ

1

XPath очень надежный и интуитивно понятный способ быстро запросить XML-документы. Вы можете достичь значения тега status, выполнив следующие шаги.

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
    documentBuilderFactory.setNamespaceAware(true); 
    DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder(); 
    Document doc = builder.parse(stream); //input stream of response. 

    XPathFactory xPathFactory = XPathFactory.newInstance(); 
    XPath xpath = xPathFactory.newXPath(); 

    XPathExpression expr = xpath.compile("//status"); // Look for status tag value. 
    String status = expr.evaluate(doc); 
    System.out.println(status); 
1

Грубый код здесь

ByteArrayInputStream input = new ByteArrayInputStream(
      response.getBytes("UTF-8")); 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document doc = builder.parse(input); 

    // first get root tag and than result tag and childs of result tag 
    NodeList childNodes = doc.getDocumentElement().getChildNodes().item(0).getChildNodes(); 
    for(int i = 0 ; i < childNodes.getLength(); i++){ 
     if("status".equals(childNodes.item(i).getNodeName())){ 
      System.out.println(childNodes.item(i).getTextContent()); 
     } 
    } 
-1

Одним из вариантов является использование библиотеки, импортированные с помощью , как:

compile 'org.jooq:joox:1.3.0' 

И использовать его как:

import org.xml.sax.SAXException; 
import java.io.File; 
import java.io.IOException; 
import static org.joox.JOOX.$; 

public class Main { 

    public static void main(String[] args) throws IOException, SAXException { 
     System.out.println(
       $(new File(args[0])).xpath("/operation/result/status").text() 
     ); 
    } 
} 

Это дает:

Failed 
+0

Это не вопрос о градиенте, и нет причин добавлять бремя сторонней библиотеки, чтобы сделать что-то, что можно легко сделать с помощью обычного Java SE. – VGR

1

Если вы только связаны с текстом статуса, как о просто иметь простое регулярное выражение с группой?

например.

String responseXml = 'xml response from service....' 

Pattern p = Pattern.compile("<status>(.+?)</status>"); 
Matcher m = p.matcher(responseXml); 

if(m.find()) 
{ 
    System.out.println(m.group(1)); //Should print 'Failed' 
}