【问题标题】:Android XmlPullParser parsing similar nodesAndroid XmlPullParser 解析相似节点
【发布时间】:2013-12-29 04:59:29
【问题描述】:

我有几个相同的 xml 节点需要解析:

<start-valid-time period-name="Overnight">2013-12-29T00:00:00-05:00</start-valid-time>
<start-valid-time period-name="Sunday">2013-12-29T06:00:00-05:00</start-valid-time>
<start-valid-time period-name="Sunday Night">2013-12-29T18:00:00-05:00</start-valid-time>
<start-valid-time period-name="Monday">2013-12-30T06:00:00-05:00</start-valid-time>

我的代码:

if(parser.getName().equalsIgnoreCase("start-valid-time")) {
   periodnames[0] = parser.getAttributeValue(0);
}

我得到第一个 period-name 属性就好了,但是如果我尝试这个:

if(parser.getName().equalsIgnoreCase("start-valid-time")) {
   periodnames[0] = parser.getAttributeValue(0);
   parser.nextTag();
   periodnames[1] = parser.getAttributeValue(0);
}

它不收集第二个句号,在这种情况下是星期日...

如果有人可以提供帮助,将不胜感激.-.

【问题讨论】:

  • start-valid-time 只有 1 个属性。那为什么periodnames[1] = parser.getAttributeValue(0);
  • 嗯,我想移到下一个开始有效时间...我对 xml 解析非常陌生
  • 对不起,我意识到我问的东西没有,因为......对不起。是的,只有一个属性,但我想要每个开始有效时间的属性值。这就是为什么我有一个数组 > periodnames ,它在每个索引中将包含每个解析后的 start-valid-timje 属性值,例如“Overnight”、“Sunday”、“Monday”等。
  • 获取下一个标签属性的不是数组

标签: android xml xml-parsing xmlpullparser


【解决方案1】:

XML

<?xml version="1.0" ?>
<start-valid-time period-name="Overnight">2013-12-29T00:00:00-05:00</start-valid-time>
<start-valid-time period-name="Sunday">2013-12-29T06:00:00-05:00</start-valid-time>
<start-valid-time period-name="Sunday Night">2013-12-29T18:00:00-05:00</start-valid-time>
<start-valid-time period-name="Monday">2013-12-30T06:00:00-05:00</start-valid-time>

解析获取属性

为了测试,我将 xml 放在了assets 文件夹中。 inInputStream

 InputStream in = MainActivity.this.getResources()
                 .getAssets().open("xmlparser.xml");
 try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(in, null);
            parser.nextTag();
            readFeed(parser);
        } catch(Exeption e)
            {
                 e.prinstStacktrace();
            }finally {
            in.close();
        }

然后

  private void readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
            String name=null,value;
            while (parser.getEventType() == XmlPullParser.START_TAG && (parser.getEventType() != XmlPullParser.END_TAG)) {
                   value = parser.getAttributeValue(null, "period-name");
                    name = readText(parser);
                    Log.i("Name.....",name);
                    Log.i("Value ...",value);
                    parser.next();
                    continue;
            }  

        }

读取文本

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

日志

12-29 03:01:23.433: I/Name.....(3273): 2013-12-29T00:00:00-05:00
12-29 03:01:23.433: I/Value ...(3273): Overnight
12-29 03:01:23.433: I/Name.....(3273): 2013-12-29T06:00:00-05:00
12-29 03:01:23.443: I/Value ...(3273): Sunday
12-29 03:01:23.443: I/Name.....(3273): 2013-12-29T18:00:00-05:00
12-29 03:01:23.443: I/Value ...(3273): Sunday Night
12-29 03:01:23.443: I/Name.....(3273): 2013-12-30T06:00:00-05:00
12-29 03:01:23.443: I/Value ...(3273): Monday

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多