XMLPullParser,如何从一个标记中获取多个值,android

XMLPullParser,如何从一个标记中获取多个值,android,android,xmlpullparser,Android,Xmlpullparser,我正在尝试解析来自internet的xml文件:。某些标记具有多个值,如: <precipitation value="0" minvalue="0" maxvalue="0.2"/> 我一直在玩弄这个,但我一次只能得到一个值(代码中的第一个值)。有没有解决这个问题的方法,或者说这个解析器是不可能的 private ArrayList parseNews(InputStream-in)抛出XmlPullParserException,IOException{ Arra

我正在尝试解析来自internet的xml文件:。某些标记具有多个值,如:

     <precipitation value="0" minvalue="0" maxvalue="0.2"/>

我一直在玩弄这个,但我一次只能得到一个值(代码中的第一个值)。有没有解决这个问题的方法,或者说这个解析器是不可能的

private ArrayList parseNews(InputStream-in)抛出XmlPullParserException,IOException{
ArrayList newsList=新建ArrayList();
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
XmlPullParser pullParser=factory.newPullParser();
setInput(在“UTF-8”中);
int eventType=pullParser.getEventType();
NewsItem=null;
while(eventType!=XmlPullParser.END_DOCUMENT){String标记名;
如果(eventType==XmlPullParser.START_标记){tagName=pullParser.getName();
如果(tagName.equals(TAG_TIME)){item=new news item();}
else if(标记名.equals(标记时间)){
如果(项!=null){
item.mTime_SV=pullParser.nextText();
系统输出打印项次(“时间”+项目mTime\U SV);
}
}
else if(标记名.equals(标记时间周期)){
如果(项!=null){
item.mTime_period_SV=pullParser.getAttributeValue(null,“from”);
System.out.println(“期间”+item.mTime\u period\u SV);
}
}
else if(标记名.equals(标记临时)){
如果(项!=null){
item.mTemp_SV=pullParser.getAttributeValue(null,“value”);
系统输出打印项次(“温度”+项目mTemp\U SV);
}
}
else if(标记名.equals(标记重新生成最小)){
如果(项!=null){
item.mRegen_min_SV=pullParser.getAttributeValue(null,“minvalue”);
系统输出打印项次(“再生最小值”+项目最小值);
}
}
else if(标记名.equals(标记号\u REGEN\u MAX)){
如果(项!=null){
item.mRegen_max_SV=pullParser.getAttributeValue(null,“maxvalue”);
系统输出打印项次(“再生最大值”+项目最大值);
}
}
else if(标记名.equals(标记号\u WIND\u DESC)){
如果(项!=null){
item.mWind_desc_SV=pullParser.getAttributeValue(null,“name”);
系统输出打印LN(“风”+项目mWind\u desc\u SV);
}
}
else if(标记名.equals(标记为风){
如果(项!=null){
item.mWind_richting_SV=pullParser.getAttributeValue(null,“name”);
系统输出打印LN(“风力增强”+项目mWind\u richting\u SV);
}
}
}
else如果(eventType==XmlPullParser.END_标记){tagName=pullParser.getName();
if(标记名.equals(标记时间)){
新闻列表。添加(项目);
item=null;
}
}
eventType=pullParser.next();
}
返回新闻列表;
}
您可以使用:


我的代码中有两行,但只有第一行会返回它的值。您需要调用parser.next()来访问另一个属性。使用
parser.getAttributeCount
来获取标记中的属性数。然后使用
parser.getAttributeName(index)
parser.getAttributeValue(index)
循环遍历所有属性。
private ArrayList<NewsItem> parseNews(InputStream in) throws XmlPullParserException, IOException {

ArrayList<NewsItem> newsList = new ArrayList<NewsItem>();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser pullParser = factory.newPullParser();
pullParser.setInput(in, "UTF-8");

int eventType = pullParser.getEventType();

NewsItem item = null;

while (eventType != XmlPullParser.END_DOCUMENT) {String tagName;
     if (eventType == XmlPullParser.START_TAG) {tagName = pullParser.getName();
     if (tagName.equals(TAG_TIME)) {item = new NewsItem();}
     else if (tagName.equals(TAG_TIME)) {
         if (item != null) {
             item.mTime_SV = pullParser.nextText();
             System.out.println("time"+ item.mTime_SV);
         }
     }

     else if (tagName.equals(TAG_TIME_PERIOD)) {
         if (item != null) {
             item.mTime_period_SV = pullParser.getAttributeValue(null, "from");
             System.out.println("period"+ item.mTime_period_SV);
         }
     }

     else if (tagName.equals(TAG_TEMP)) {
        if (item != null) {
            item.mTemp_SV = pullParser.getAttributeValue(null,"value");
            System.out.println("temp " + item.mTemp_SV);
        }
     }


     else if (tagName.equals(TAG_REGEN_MIN)) {
         if (item != null) {
             item.mRegen_min_SV = pullParser.getAttributeValue(null,"minvalue");
             System.out.println("regen min " + item.mRegen_min_SV);
         }
     }

     else if (tagName.equals(TAG_REGEN_MAX)) {
         if (item != null) {
             item.mRegen_max_SV = pullParser.getAttributeValue(null,"maxvalue");
             System.out.println("regen max " + item.mRegen_max_SV);
         }
     }

     else if (tagName.equals(TAG_WIND_DESC)) {
        if (item != null) {
            item.mWind_desc_SV = pullParser.getAttributeValue(null,"name");
            System.out.println("wind " + item.mWind_desc_SV);
        }
     }

    else if (tagName.equals(TAG_WIND_RICHTING)) {
        if (item != null) {
            item.mWind_richting_SV = pullParser.getAttributeValue(null,"name");
            System.out.println("wind richting " + item.mWind_richting_SV);
        }
    }
}

else if (eventType == XmlPullParser.END_TAG) { tagName = pullParser.getName();
    if (tagName.equals(TAG_TIME)) {
        newsList.add(item);
        item = null;
    }
}

eventType = pullParser.next();
}

return newsList;
 }
String min = parser.getAttributeValue(null, "minvalue"); 
String max = parser.getAttributeValue(null, "maxvalue");