【问题标题】:android parsing xml content from Stringandroid从String解析xml内容
【发布时间】:2014-12-30 13:38:58
【问题描述】:

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

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

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

现在我想使用主标签“card”和数字来解析 id 和 place 等值 “33”也要解析。

以下是我尝试过的

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 的值在我打印时似乎为空。 NullPointerException 在 if 条件 "if (cardTag.equalsIgnoreCase("card"))" 时上升

怎么做

【问题讨论】:

    标签: android xml parsing


    【解决方案1】:

    文档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
    

    【讨论】:

      猜你喜欢
      • 2021-07-02
      • 1970-01-01
      • 2013-08-30
      • 2016-05-05
      • 2016-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多