2012-08-15 23 views
6

Durante l'esecuzione di un POST http i memorizzo la risposta come una risposta stringa.Analizza xml dalla risposta httppost

HttpResponse httpresponse = httpclient.execute(httppost); 
HttpEntity resEntity = httpresponse.getEntity(); 
response = EntityUtils.toString(resEntity); 

se stampo risposta Assomiglia:

<?xml version="1.0" encoding="UTF-8"?> 
<response status="ok"> 
<sessionID>lo8mdn7bientr71b5kn1kote90</sessionID> 
</response> 

Vorrei memorizzare solo il sessionID come una stringa. Ho provato

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
InputSource is = new InputSource(new StringReader(xml)); 

e vari metodi come questo, ma non mi permette di eseguire il codice dal DocumentBuildFactory e InputSource non sono validi.

Cosa devo fare per estrarre stringhe specifiche da questo XML?

+0

per me il [KSOAP2] (http://ksoap2.sourceforge.net/) è uno dei migliori modi per gestire questo tipo di risposte – mihail

risposta

8

Questo è solo test rapido e sporco. Ha funzionato per me.

import java.io.IOException; 
import java.io.StringReader; 

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

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 

public class Test { 
    public static void main(String[] args) { 
     String xml= "<?xml version=\"1.0\" encoding=\"UTF-8\"?><response status=\"ok\"><sessionID>lo8mdn7bientr71b5kn1kote90</sessionID></response>"; 
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder; 
     InputSource is; 
     try { 
      builder = factory.newDocumentBuilder(); 
      is = new InputSource(new StringReader(xml)); 
      Document doc = builder.parse(is); 
      NodeList list = doc.getElementsByTagName("sessionID"); 
      System.out.println(list.item(0).getTextContent()); 
     } catch (ParserConfigurationException e) { 
     } catch (SAXException e) { 
     } catch (IOException e) { 
     } 
    } 
} 

uscita: lo8mdn7bientr71b5kn1kote90

+0

Grazie per il risposta, questo funziona l'unico problema è quando uso la mia risposta effettiva non lo fa. Penso che lo faccia perché la stringa contiene virgolette che non sono scappate correttamente. – Ted

+0

Non sono sicuro di cosa si ottiene esattamente nella risposta, una ipotesi è che potrebbe includere BOM (google XML BOM per maggiori informazioni) all'inizio della stringa UTF. Se hai un debugger (come quello in Eclipse), dovrebbe essere abbastanza semplice capire quale sia la differenza tra esso e una stringa di lavoro hardcoded. –

+0

Se la codifica del testo della risposta è UTF-8, forse vale anche la pena provare a cambiare la risposta = EntityUtils.toString (resEntity); a response = EntityUtils.toString (resEntity, "UTF-8"); –

1

1. Utilizzare DOM Parser.

Esempio:

DocumentBuilderFactory odbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder odb = odbf.newDocumentBuilder(); 
      InputSource is = new InputSource(new StringReader(xml)); 
      Document odoc = odb.parse(is); 
      odoc.getDocumentElement().normalize(); // normalize text representation 
      System.out.println ("Root element of the doc is " + odoc.getDocumentElement().getNodeName()); 
      NodeList LOP = odoc.getElementsByTagName("locations"); 
      int totalPersons =LOP.getLength(); 
      System.out.println("Total nos of locations:"+totalPersons); 

      for(int s=0; s<LOP.getLength() ; s++) 
      { 
       Node FPN =LOP.item(s); 
       if(FPN.getNodeType() == Node.ELEMENT_NODE) 
        { 

        Element latlon = (Element)FPN;                 

        NodeList oNameList1 = latlon.getElementsByTagName("featured");          
        Element firstNameElement = (Element)oNameList1.item(0); 
        NodeList textNList1 = firstNameElement.getChildNodes(); 
        //this.setLocationId(((Node)textNList1.item(0)).getNodeValue().trim());  
        featuredArr = changeToBoolean(((Node)textNList1.item(0)).getNodeValue().trim());         // value taken 
        System.out.println("#####The Parsed data#####"); 
        System.out.println("featured : " + ((Node)textNList1.item(0)).getNodeValue().trim());   
        System.out.println("#####The Parsed data#####"); 
    } 

Vedere questo link per maggiori informazioni:

http://tutorials.jenkov.com/java-xml/dom.html

Problemi correlati