【问题标题】:Getting "null" in place of textvalue After parsing XML using PullParser in Android在 Android 中使用 PullParser 解析 XML 后,获取“null”代替 textvalue
【发布时间】:2013-07-03 17:30:00
【问题描述】:

我看过this。所以请不要将我重定向到那个网站。

我已经使用过 DOM 解析器,here 是我的问题。

我有相同的 XML:

<MyResource>
<Item>First</Item>
<Item>Second</Item>
</MyResource>

现在我只能通过 PullParser 解析这个 XML。 我的方法取自this:

private List readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
        // TODO Auto-generated method stub
         List entries = new ArrayList();


            parser.require(XmlPullParser.START_TAG, ns, "MyResource");
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                // Starts by looking for the entry tag
                if (name.equals("MyResource")) {
                    entries.add(readEntry(parser));
                } else {
                    skip(parser);
                }
            }  
            return entries;
    }

    private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
        // TODO Auto-generated method stub
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            throw new IllegalStateException();
        }
        int depth = 1;
        while (depth != 0) {
            switch (parser.next()) {
            case XmlPullParser.END_TAG:
                depth--;
                break;
            case XmlPullParser.START_TAG:
                depth++;
                break;
            }
        }
    }

    private Item readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
        // TODO Auto-generated method stub
         parser.require(XmlPullParser.START_TAG, ns, "Item");
            String text = null;
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                if (name.equals("Item")) {
                    text = readMyText(parser);
                } else {
                    skip(parser);
                }
            }
            return new Item(text);
    }

    private String readMyText(XmlPullParser parser) throws XmlPullParserException, IOException {
        // TODO Auto-generated method stub
        parser.require(XmlPullParser.START_TAG, ns, "Item");
        String text = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "Item");
        return text;
    }

    private String readText(XmlPullParser parser) throws XmlPullParserException, IOException {
        String result = "";
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
        return result;
    }

我得到这个作为解析文本:

null
null

谁能帮我解决这个问题??

【问题讨论】:

  • 发布您的 java 代码,以便我们更好地帮助您。
  • developer.android.com/training/basics/network-ops/xml.html 它取自这里。所以我认为你不需要我的 java 代码,因为我已经给出了我的 xml 和我使用过的代码。
  • @prasharonnet 所以你去...现在让我们看看你能多快回答...

标签: android xml-parsing android-pullparser


【解决方案1】:

参考this链接它有一个很好的例子

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
     factory.setNamespaceAware(true);
     XmlPullParser xpp = factory.newPullParser();

     xpp.setInput(new StringReader ("<foo>Hello World!</foo>"));
     int eventType = xpp.getEventType();
     while (eventType != XmlPullParser.END_DOCUMENT) {
      if(eventType == XmlPullParser.START_DOCUMENT) {
          System.out.println("Start document");
      } else if(eventType == XmlPullParser.END_DOCUMENT) {
          System.out.println("End document");
      } else if(eventType == XmlPullParser.START_TAG) {
          System.out.println("Start tag "+xpp.getName());
      } else if(eventType == XmlPullParser.END_TAG) {
          System.out.println("End tag "+xpp.getName());
      } else if(eventType == XmlPullParser.TEXT) {
          System.out.println("Text "+xpp.getText());
      }
      eventType = xpp.next();
     }

【讨论】:

  • 我已经更新了我的问题。
【解决方案2】:

我可以提供一个示例代码来解析您的 XML。来吧,

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    boolean flag=false;
         factory.setNamespaceAware(true);
         XmlPullParser xpp = factory.newPullParser();

         xpp.setInput(new StringReader ("<MyResource><Item>First</Item>    <Item>Second</Item>/MyResource>"));
         int eventType = xpp.getEventType();
         while (eventType != XmlPullParser.END_DOCUMENT) {
         if(eventType == XmlPullParser.START_TAG) {
              System.out.println("Start tag "+xpp.getName());
              if(xpp.getName().toString().equals("MyResource"){
                 flag=true;
               }
    else if(xpp.getName().toString().equals("Item"){
                 if(flag){
                  String test=xpp.nextText().toString();
//do whatever u want with the data
    }
               }
          } else if(eventType == XmlPullParser.END_TAG) {
              if(xpp.getText().equals("MyResource")
    flag=false;
          } 
          eventType = xpp.next();
         }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 2012-09-10
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多