android从String解析xml内容

时间:2014-12-30 13:38:58

标签: android xml parsing

以下是解密加密值后得到的xml内容

<card order_no="1" id="cmpe0rhm3ym5ha8wlqp4jt7u" place="HOME">33</card>

现在我在名为message的字符串中有上述内容。

现在我想使用主标签&#34; card&#34;解析id和place等值。和号码 &#34; 33&#34;还要解析。

以下是我的尝试

InputStream inputStream = new ByteArrayInputStream(message.getBytes());
                    XmlPullParser cardParser = Xml.newPullParser();
                    cardParser.setInput(inputStream, null);

                    Map<String, String> attrs = XMLParsers.getAttributes(cardParser);
                    String cardTag = cardParser.getName();
                    if (cardTag.equalsIgnoreCase("card")) 
                    {
                        CardTag card = new CardTag();                       
                        card.setId(attrs.get("id"));
                        card.setPlace(attrs.get("place"));
                        card.setCardNumericValue(cardParser.getText());
                        return card;
                    }

我已将字符串存储在InputStream中并再次尝试解析它,但我得到一个空指针异常

当我打印它时,String cardTag的值似乎为null。 如果条件为&#34; if(cardTag.equalsIgnoreCase(&#34; card&#34;))&#34;

,则NullPointerException上升

如何做到这一点

1 个答案:

答案 0 :(得分:0)

文档says

  

对于START_TAG或END_TAG事件,当前的(本地)名称   启用名称空间时返回元素。命名空间时   处理被禁用,返回原始名称。对于ENTITY_REF   事件,返回实体名称。 如果当前事件不是   START_TAG,END_TAG或ENTITY_REF,返回null

所以,我相信你当前的事件是START_DOCUMENT,你需要调用cardParser.next()来获得下一个开始标记事件。请看一下示例

    public class SimpleXmlPullApp{

     public static void main (String args[])
         throws XmlPullParserException, IOException
     {
         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.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();
         }
         System.out.println("End document");
     }
 }

<强>输出

Start document
Start tag foo
Text Hello World!
End tag foo
End document