2017-04-25 3 views
0

J'ai donc déjà reçu de l'aide d'ici, alors je me suis dit pourquoi ne pas essayer à nouveau!? Toutes les suggestions seraient grandement appréciées. J'utilise le client HTTP et je fais une requête POST; la réponse est un organisme XML qui ressemble à ce qui suit:Extraction des valeurs d'attribut à partir d'un XML HttpResponse en Java

<?xml version="1.0" encoding="UTF-8"?> 
<invokeResult> 
<method name="RS"> 
<params> 
     <param name="sp" value="" /> 
     <param name="cp" value="" /> 
     <param name="ck" value="" /> 
</params> 
</method> 
<status>OK</status> 
<result> 
    <status>ENDED</status> 
    <reportUrl></reportUrl> 
    <runId></runId> 
    <pass count="0" /> 
    <fail count="1" /> 
    <message>column,report</message> 
    </result> 
</invokeResult>  

maintenant ...

j'ai une HttpEntity qui est

String responseString = EntityUtils.toString(response.getEntity()); 

je voudrais obtenir la valeur de <pass count="0" /> de la réponse XML via le code Java. quelqu'un peut-il m'aider?

Code de détail que j'ai créé mais en obtenant une exception de pointeur nul.

DefaultHttpClient client = new DefaultHttpClient(); 
     HttpGet request = new HttpGet("REQUEST-URL"); 
     HttpResponse response = client.execute(request); 
     if (response.getStatusLine().getStatusCode() == 200 && response.getEntity() != null) { 
      String responseString = EntityUtils.toString(response.getEntity()); 
      responseString=responseString.replaceAll("<?xml*?>", "").trim(); 
      DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
      Document doc = docBuilder.parse(new InputSource(new StringReader(
        responseString))); 
      NodeList orderNode = doc.getElementsByTagName("<pass count="); 
      String strOrdNo = orderNode.item(0).getTextContent(); 
      logger.info("pass Value = " + strOrdNo); 

Merci

+0

Dans quelle ligne obtenez-vous le NPE? –

+0

Obtenir NPE à NodeList orderNode = doc.getElementsByTagName (" user3175778

+0

Vous avez juste besoin de passer le nom de l'étiquette là; 'doc.getElementsByTagName (" pass ")'. S'il vous plaît vérifier ma réponse ci-dessous. –

Répondre

0

S'il vous plaît noter les pass et fail sont des balises vides (les balises fermées comme />) et ils ne détiennent aucune valeur. Si vous essayez d'extraire la valeur de l'attribut count, vous pouvez essayer ce qui suit

NodeList orderNode = doc.getElementsByTagName("pass"); 
String strOrdNo = orderNode .item(0).getAttributes().getNamedItem("count").getNodeValue(); 
logger.info("pass Value = " + strOrdNo); 
+0

Merveilleux. J'ai la valeur maintenant. Merci beaucoup monsieur. – user3175778