0

Мне нужно прочитать XML, используя XMLPullParser. Но когда я пытаюсь его проанализировать, мой eventType начинается с 0 (т. Е. START_DOCUMENT) и сразу же переходит к 1 (то есть END_DOCUMENT), тем самым пропуская все остальные теги.XMLPullParser - пропускает все теги

Вот мой пример кода:

public void parseProperties (InputStream in) 
{ 
    try 
    { 
     XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance(); 
     XmlPullParser pullParser = pullParserFactory.newPullParser(); 
     pullParser.setInput(in, null); 

     int eventType = pullParser.getEventType(); 
     while (eventType != XmlPullParser.END_DOCUMENT) 
     { 
      String name = pullParser.getName(); 
      switch (eventType) 
      { 
       case XmlPullParser.START_TAG: 
        break; 
       case XmlPullParser.END_TAG: 
        break; 
      } 
      eventType = pullParser.next(); 
     } 
    } 
    catch (XmlPullParserException ex) 
    { 
    } 
    catch (IOException ex) 
    { 
    } 
    finally 
    { 

    } 
} 

Может кто-то пожалуйста, скажите мне, почему я не в состоянии поразить любые случаи переключения?

ответ

1

Это всегда работает для меня:

public class ParseXML { 

    private String xmlData; 

    public ParseXML (String xmlData) { 

     this.xmlData = xmlData; 
    } 

    public boolean process() { 

     boolean status = true; 
     boolean inEntry = false; 
     String textValue = ""; 

     try { 

      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      XmlPullParser xpp = factory.newPullParser(); 
      xpp.setInput(new StringReader(this.xmlData)); 

      int eventType = xpp.getEventType(); 

      while (eventType != XmlPullParser.END_DOCUMENT) { 

       String tagName = xpp.getName(); 

       switch (eventType) { 

        case XmlPullParser.START_TAG: 
         if (tagName.equalsIgnoreCase("MyTagStart")) { 
          inEntry = true; 
         } 
         break; 

        case XmlPullParser.TEXT: 
         textValue = xpp.getText(); 
         break; 

        case XmlPullParser.END_TAG: 
         if (inEntry) { 
          if (tagName.equalsIgnoreCase("MyTagEnd")) { 
           inEntry = false; 
          } 
          else if (tagName.equalsIgnoreCase("SomeTag")) { 
           someInfo.setInfo(textValue); 
          } 
         } 
         break; 

        default: 
         // 
       } 
       eventType = xpp.next(); 
      } 

     } catch (Exception e) { 

      status = false; 
      e.printStackTrace(); 
     } 

     return true; 
    } 
} 

и просто создать экземпляр передавая свои данные XML:

ParseXML parseXML = new ParseXML(contentXML); 
parseXML.process();