【问题标题】:Parse XML in android?在android中解析XML?
【发布时间】:2014-06-20 07:06:50
【问题描述】:

我有以下 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>

我需要解析它并获取“Message”和“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();
    }
}

【问题讨论】:

    标签: android xml xml-parsing xmlpullparser


    【解决方案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;
        }
    }
    

    【讨论】:

      【解决方案2】:

      终于做到了

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

      【讨论】:

      • 如果属性的顺序改变了会发生什么?您通过索引而不是名称获取属性值。
      • 那么索引不会改变。但如果发生这种情况,我想在这种情况下我将不得不通过名称本身来获取价值
      • 这正是我在发布的答案中所做的
      【解决方案3】:

      您可以使用Dom4J 来解析您的数据。

      您可以使用 BeginnersBook 中的此示例:Parsing XML using Dom4J API

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-06
        • 2019-01-25
        相关资源
        最近更新 更多