2010-11-26 14 views
0

Je veux analyser ce xml et obtenir le résultat entre l'étiquette ... mais je ne peux pas obtenir le résultat de mon xml estErreur dans l'analyseur

<?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> Le gestionnaire

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; 
     } 


} 



} 

Toute modification nécessaire

+0

Vos mots-clés peut-être tort. Nsxmlparser n'est-il pas la classe iPhone? Je recommanderais "sax" et "xmlparser" pour cela. –

+0

@Tim ses balises xmlparser sry ... sont corrects .. – xydev

Répondre

2

Lorsque vous avez trouvé l'étiquette de début que vous recherchez, les «caractères» sont appelés une ou plusieurs fois. Vous devez collecter les données pour ne pas les écraser. Changer

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

à

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

Ou utilisez StringBuilder pour le faire. De plus, vous devez supprimer cela, il semble écraser le résultat Chaîne:

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

effectivement l'application échoue juste après startElement et ne pas entrer endElement .. – xydev

+0

Que diriez-vous des exceptions ou des erreurs que vous obtenez dans logcat? Les gens affichent toujours des codes ou des questions, mais oublient souvent d'ajouter les exceptions. Mais les exceptions donnent des indications essentielles sur ce qui ne va pas avec le code. Par exemple, je ne vois pas 'currentNode' être rempli n'importe où, et vous l'avez initialisé avec null. Donc probablement cela peut être votre problème, car vous ne pouvez pas appeler égal si l'objet n'est pas initialisé (lire: 'null') – Tseng

+0

J'ai ajouté un exemple corrigé. Je pense que @Tseng a raison, vous ne définissez jamais "currentNode" et pourriez obtenir une exception NullPointerException. J'ai retourné le if ("result" .equals (currentNode)) pour l'empêcher, définir et désactiver currentNode quand start et entElement sont appelés et ajouter la valeur à la chaîne de résultat chaque fois que des caractères sont appelés. –