2014-06-20 57 views
1

我有下面的XML,在android中解析XML?

<?xml version="1.0"?> 

    <rss xmlns:Data="http://www.google.com" version="2.0"> 

    <Data:NoticeBoard Mesage="Welcome " Id="1"/> 

    <Data:NoticeBoard Mesage="Hi......" Id="2"/> 

    </rss> 

我需要分析它,並得到「消息」和「ID」的文本。

我嘗試使用拉解析器,但我只得到一個開始標記即「布告欄」

這裏是我試過

public void parseXML(XmlPullParser myParser) { 
    try { 
     int event = myParser.getEventType(); 
     while (event != XmlPullParser.END_DOCUMENT) { 
      String name = myParser.getName(); 
      switch (event) { 
      case XmlPullParser.START_TAG: 
       System.out.println("Start tag " + myParser.getName()); 
       break; 
      case XmlPullParser.END_TAG: 
       System.out.println("End tag " + myParser.getName()); 
       break; 
      case XmlPullParser.TEXT: 
       System.out.println("Text " + myParser.getText()); 
       break; 
      } 
      event = myParser.next(); 
     } 
    } catch (XmlPullParserException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

回答

1

這裏的parsign代碼

你需要的是得到你從來沒有的屬性值。您有myParser.getName()但您需要屬性值Mesage

public class XMLPullParserHandler { 

    private String text; 

    public XMLPullParserHandler() { 

    } 
    public Void parse(InputStream is) { // pass the input stream 
     XmlPullParserFactory factory = null; 
     XmlPullParser parser = null; 
     try { 
      factory = XmlPullParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      parser = factory.newPullParser(); 

      parser.setInput(is, null); 
      boolean check =false; 

      //factory instantiates an object 

      int eventType = parser.getEventType(); 
      while (eventType != XmlPullParser.END_DOCUMENT) { 
       String tagname = parser.getName(); 
       switch (eventType) { 
       case XmlPullParser.START_TAG: 
        if (tagname.equalsIgnoreCase("NoticeBoard")) { 

         String value = parser.getAttributeValue(null, "Mesage"); 
         Log.i("Value is.........",""+value); 

        } 


        break; 

       case XmlPullParser.TEXT: 
        text = parser.getText(); 
        break; 

       case XmlPullParser.END_TAG: 


        break; 

       default: 
        break; 
       } 
       eventType = parser.next(); 
      } 

     } catch (XmlPullParserException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 
} 
0

終於做到了

 try { 
     xmlFactoryObject = XmlPullParserFactory.newInstance(); 
     xmlFactoryObject.setNamespaceAware(true); 
     myparser = xmlFactoryObject.newPullParser(); 

     myparser.setInput(new StringReader(apiResponse)); 
     int event; 

     event = myparser.getEventType(); 
     while (event != XmlPullParser.END_DOCUMENT) { 
      if (event == XmlPullParser.START_DOCUMENT) { 
      } else if (event == XmlPullParser.END_DOCUMENT) { 
      } else if (event == XmlPullParser.START_TAG) { 
       System.out.println("Start tag " + myparser.getName()); 
       if (myparser.getName().equalsIgnoreCase("NoticeBoard")) { 
        mesaage.add(myparser.getAttributeValue(1)); 
        Log.e("", myparser.getAttributeValue(1)); 
       } 
      } else if (event == XmlPullParser.END_TAG) { 

      } else if (event == XmlPullParser.TEXT) { 
      } 
      event = myparser.next(); 
     } 
    } catch (XmlPullParserException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

如果屬性順序改變會發生什麼?您不按名稱按索引獲取屬性值。 – Raghunandan

+0

那麼索引不會改變。但是,如果發生這種情況,我想我必須通過名稱本身獲得價值 – WISHY

+0

這正是我在發佈的答案中所做的 – Raghunandan