2010-11-26 3 views
0

Ich möchte diese xml analysieren und das Ergebnis zwischen dem Tag ... aber ich kann nicht das Ergebnis meiner xml istFehler bei Parser

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><loginResponse xmlns="https://comm1.get.com/"><loginResult>true</loginResult><result>success</result></loginResponse></soap:Body></soap:Envelope> Der Handler

public class MyXmlContentHandler extends DefaultHandler { 
    String result; 
    private String currentNode; 
    private String currentValue = null; 
    public String getFavicon() { 
     return result; 
    } 
    @Override 
    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException { 


     if (localName.equalsIgnoreCase("result")) { 
      //offerList = new BFOfferList(); 
      this.result = new String(); 

     } 
    } 

    @Override 
    public void endElement(String uri, String localName, String qName) 
      throws SAXException { 


     if (localName.equalsIgnoreCase("result")) { 
      result = localName; 

     } 
    } 

    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 

     String value = new String(ch, start, length); 

     if (currentNode.equals("result")){ 
      result = value; 
      return; 
     } 


} 



} 

Änderungen erforderlich

erhalten
+0

Ihre Tags vielleicht falsch. Ist die iPhone Klasse nicht nsxmlparser? Ich würde "Sax" und "Xmlparser" dafür empfehlen. –

+0

@Tim seine xmlparser sry ... Tags sind korrekt .. – xydev

Antwort

2

Wenn Sie das gewünschte Start-Tag gefunden haben, wird "characters" einmal oder mehrmals aufgerufen. Sie müssen die Daten sammeln, nicht überschreiben. Ändern

if (currentNode.equals("result")){ 
     result = value; 
     return; 
    } 

zu

if (currentNode.equals("result")){ 
     result += value; 
     return; 
    } 

Oder verwenden String es zu tun. Darüber hinaus Sie diese entfernen sollte, so scheint es, Ihr Ergebnis String zu überschreiben:

result = localName; 

EDIT:

public class MyXmlContentHandler extends DefaultHandler { 

private String result = ""; 
private String currentNode; 

public String getFavicon() { 
    return result; 
} 

@Override 
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
    currentNode = localName; 
} 

@Override 
public void endElement(String uri, String localName, String qName) throws SAXException { 
    currentNode = null; 
} 

@Override 
public void characters(char[] ch, int start, int length) throws SAXException { 

    String value = new String(ch, start, length); 

    if ("result".equals(currentNode)){ 
     result += value; 
    } 
} 
} 
+0

tatsächlich schlägt die App nur nach StartElement und nicht in endElement .. – xydev

+0

Wie wäre es mit den Ausnahmen oder Fehler, die Sie in Logcat bekommen? Die Leute schreiben immer Codes oder Fragen, vergessen aber oft, die Ausnahmen hinzuzufügen. Ausnahmen geben jedoch wichtige Hinweise darauf, was mit dem Code nicht stimmt. Zum Beispiel sehe ich nicht, dass 'currentNode' irgendwo gefüllt ist, und Sie initialisierten es mit null. Das ist wahrscheinlich Ihr Problem, da Sie das Objekt nicht initialisieren können, wenn Sie das Objekt nicht initialisieren (lesen Sie: 'null') – Tseng

+0

Ich habe ein korrigiertes Beispiel hinzugefügt. Ich denke @Tseng hat Recht, du hast nie "currentNode" gesetzt und bekommst möglicherweise eine NullPointerException. Ich habe das if ("result" .equals (currentNode)) umgedreht, um dies zu verhindern, currentNode setzen und aufheben, wenn start und entElement aufgerufen werden und den Wert jedes Mal, wenn Zeichen aufgerufen werden, zum result String hinzufügen. –