2010-12-03 4 views
2

をオンザフライでXMLを作成します:)私は、Androidに新しいですあなたの先生これは正しいプログラムであり、今も元気実行している文字列から

に感謝します。私はサーバーが私に返すXML形式のデータ(XMLドキュメント)を含むStringを持っています。私はXmlResourceParserとAndroidの中でそれを解析したいが、それだけで例えば、あなたのデバイスに保存されているXML文書を受け付けます

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

私はXmlResourceParserは私のこの文字列を解析します。この文字列をxmlドキュメントとして受け入れる方法。例外

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 –

答えて

4

以下の方法が、クレート例えばXmlPullParser

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

を使用してみてください:

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

私は自分のコードを共有しましたが、これはXMLの形式が正しくないため、例外を作成しています。 –

+0

thnx try { \t \t \t // InputStream is = new 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(new StringReader(xml)); \t \t}キャッチ(例外例){ \t \t \t ex.printStackTrace(); \t \t –

+0

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

関連する問題