2010-12-03 7 views
2

Ce programme est correct et maintenant fonctionne bien :) merci MonsieurCréer xml à la volée à partir d'une chaîne

Je suis nouveau à Android. J'ai une chaîne qui contient des données de format XML (c'est un document XML) que les serveurs me renvoie. Je veux analyser dans Android avec XmlResourceParser mais il accepte uniquement les documents XML qui sont stockés sur votre appareil: par exemple

XmlResourceParser xmlResourceParser = getResources().getXml(
       R.xml.new_xml); 




"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+ 
        "<ItemInfo>" + "<Status>Success</Status>" 
       + "<Reason></Reason>" + "<IsMore>yes</IsMore>" 
       + "<ItemList>" 
       + "<Item Name=\"Ahmad\" Level=\"1\" UserId=\"5\"></Item >" 
       + "<Item Name=\"Ahmad\" Level=\"1\" UserId=\"5\"></Item >" 
       + "<Item Name=\"Ahmad\" Level=\"1\"UserId=\"5\"></Item >" 
       + "</ItemList>" + "</ItemInfo>"; 

Je veux XmlResourceParser pour analyser mon cette chaîne. mais comment faire accepter cette chaîne comme un document XML. en utilisant la méthode suivante, mais la mise en caisse exception

private XmlPullParser xmlResourceParser; 


xml = xml.replaceAll("\t", ""); 
        try {   
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      xmlResourceParser = factory.newPullParser(); 
      xmlResourceParser.setInput(new StringReader(xml)); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
int eventType = -1; 
     while (eventType != XmlResourceParser.END_DOCUMENT) { 
      try { 
       if (eventType == XmlResourceParser.START_TAG) { 

        String strNode = xmlResourceParser.getName(); 
        if (strNode.equalsIgnoreCase("Status")) { 
         do { 
          xmlResourceParser.next(); 
         } while (eventType == XmlResourceParser.TEXT); 
         if (!xmlResourceParser.getText().equalsIgnoreCase(
           "success")) { 
          do { 
           eventType = xmlResourceParser.next(); 
          } while (eventType != XmlResourceParser.START_TAG); 
          if (xmlResourceParser.getName().equalsIgnoreCase(
            "reason")) 
           eventType = xmlResourceParser.next(); 
          todoItems.add(xmlResourceParser.getText()); 
          return todoItems; 
         } 
        } 
        if (strNode.equals("IsMore")) { 
         do { 
          xmlResourceParser.next(); 
         } while (eventType == XmlResourceParser.TEXT); 
         if (xmlResourceParser.getText().equalsIgnoreCase("yes")) 
          todoItems.add("nextPage");// if nextPage then there 
         // is one more page 
         // otherwise no next 
         // page 
         else 
          todoItems.add("lastPage");// show user pervious 
         // button instead of 
         // next button 
        } 
        if (strNode.equals("Item")) { 
         todoItems.add(xmlResourceParser.getAttributeValue(null, 
           "Name")); 
         todoItems.add(xmlResourceParser.getAttributeValue(null, 
           "Level")); 
         todoItems.add(xmlResourceParser.getAttributeValue(null, 
           "UserId")); 

        }      
       } 

       eventType = xmlResourceParser.next(); 
      } catch (XmlPullParserException xmlPullExp) { 
       xmlPullExp.printStackTrace(); 
       todoItems.add("XmlPullParserException"); 
      } catch (IOException ioExp) { 
       ioExp.printStackTrace(); 
       todoItems.add("IOException"); 
      } catch (Exception exp) { 
       exp.printStackTrace(); 
       todoItems.add("Exception"); 
      } 
     } 
     return todoItems; 
    } 
+0

http://apachejava.blogspot.com/2010/12/saxbuilder -alternative-xmlpullparser.html # comments –

Répondre

4

Essayez d'utiliser XmlPullParser

http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

Par exemple:

InputStream xmlIS; 
..... 
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
factory.setNamespaceAware(true); 
XmlPullParser xpp = factory.newPullParser(); 
xpp.setInput(xmlIS, null); 
+0

monsieur J'ai partagé mon code mais cela crée une exception car xml n'est pas bien formaté. –

+0

thnx try { \t \t \t // InputStream est = nouveau ByteArrayInputStream (xml.getBytes ("UTF-8")); \t \t \t XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); \t \t \t factory.setNamespaceAware (true); \t \t \t xmlResourceParser = factory.newPullParser(); \t \t \t xmlResourceParser.setInput (nouveau StringReader (xml)); \t \t} catch (Exception ex) { \t \t \t ex.printStackTrace(); \t \t} –

+0

http://apachejava.blogspot.com/2010/12/saxbuilder-alternative-xmlpullparser.html#comments –

Questions connexes