Android 如何使用XmlPullParser解析属性?
我有以下xml结构:Android 如何使用XmlPullParser解析属性?,android,xml,xmlpullparser,Android,Xml,Xmlpullparser,我有以下xml结构: <markers> <marker provincia="Guayas" lat="-2.33" lng="-77.63" /> <marker provincia="Pichincha" lat="-3.23" lng="-81.13" /> </markers> 我想在列表视图中显示它。我已经在这个基础上,但这有其他的xml结构。我想我需要输入参数getAttributeCount(),我发现了这个,但我不太明白。你
<markers>
<marker provincia="Guayas" lat="-2.33" lng="-77.63" />
<marker provincia="Pichincha" lat="-3.23" lng="-81.13" />
</markers>
我想在列表视图中显示它。我已经在这个基础上,但这有其他的xml结构。我想我需要输入参数getAttributeCount(),我发现了这个,但我不太明白。你能指引我吗?。这是代码修改:
package com.makemyandroidapp.example.stacksites;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.content.Context;
public class SitesXmlPullParser {
static String KEY_MARKER = "marker";
public static List<StackSite> getStackSitesFromFile(Context ctx) {
List<StackSite> stackSites;
stackSites = new ArrayList<StackSite>();
try {
// Get our factory and PullParser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
// Open up InputStream and Reader of our file.
FileInputStream fis = ctx.openFileInput("StackSites.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
xpp.setInput(reader);
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = xpp.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
break;
case XmlPullParser.END_TAG:
if (tagname.equals(KEY_MARKER)) {
KEY_MARKER = xpp.getAttributeValue(null, "provincia");
KEY_MARKER = xpp.getAttributeValue(null, "lat");
KEY_MARKER = xpp.getAttributeValue(null, "lng");
}
else{
}
break;
default:
break;
}
//move on to next iteration
eventType = xpp.next();
}
} catch (Exception e) {
e.printStackTrace();
}
// return the populated list.
return stackSites;
}
}
package com.makemyandroidapp.example.stacksites;
导入java.io.BufferedReader;
导入java.io.FileInputStream;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.List;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserFactory;
导入android.content.Context;
公共类SitesXmlPullParser{
静态字符串键\u MARKER=“MARKER”;
公共静态列表getStackSitesFromFile(上下文ctx){
列出地点;
stackSites=newarraylist();
试一试{
//把我们的工厂和工厂弄来
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
XmlPullParser xpp=factory.newPullParser();
//打开文件的输入流和读取器。
FileInputStream fis=ctx.openFileInput(“StackSites.xml”);
BufferedReader reader=新的BufferedReader(新的InputStreamReader(fis));
设置输入(读卡器);
int eventType=xpp.getEventType();
while(eventType!=XmlPullParser.END_文档){
字符串标记名=xpp.getName();
开关(事件类型){
case XmlPullParser.START_标记:
打破
case XmlPullParser.END_标记:
if(标记名.equals(键标记)){
KEY_MARKER=xpp.getAttributeValue(null,“provincia”);
KEY_MARKER=xpp.getAttributeValue(null,“lat”);
KEY_MARKER=xpp.getAttributeValue(null,“lng”);
}
否则{
}
打破
违约:
打破
}
//继续下一个迭代
eventType=xpp.next();
}
}捕获(例外e){
e、 printStackTrace();
}
//返回填充的列表。
返回站点;
}
}
我找到了解决方案:
public class SitesXmlPullParser {
static final String KEY_MARKERS = "markers";
static final String KEY_MARKER= "marker";
public static List<StackSite> getStackSitesFromFile(Context ctx) {
// List of StackSites that we will return
List<StackSite> stackSites;
stackSites = new ArrayList<StackSite>();
// temp holder for current StackSite while parsing
StackSite curStackSite = null;
try {
// Get our factory and PullParser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xpp = factory.newPullParser();
// Open up InputStream and Reader of our file.
FileInputStream fis = ctx.openFileInput("StackSites.xml");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
// point the parser to our file.
xpp.setInput(reader);
// get initial eventType
int eventType = xpp.getEventType();
// Loop through pull events until we reach END_DOCUMENT
while (eventType != XmlPullParser.END_DOCUMENT) {
// Get the current tag
String tagname = xpp.getName();
// React to different event types appropriately
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase(KEY_MARKER)) {
// If we are starting a new <markers> block we need
//a new StackSite object to represent it
curStackSite = new StackSite();
}
break;
case XmlPullParser.END_TAG:
if (tagname.equals(KEY_MARKER)) {
String title = xpp.getAttributeValue(null, "provincia");
String lat = xpp.getAttributeValue(null, "lat");
String lng = xpp.getAttributeValue(null, "lng");
curStackSite.setTitulo(title);
curStackSite.setLat(lat);
curStackSite.setLng(lng);
stackSites.add(curStackSite);
}
break;
default:
break; }
//move on to next iteration
eventType = xpp.next();
}
} catch (Exception e) {
e.printStackTrace();
}
// return the populated list.
return stackSites;
}
}
公共类SitesXmlPullParser{
静态最终字符串键\u MARKERS=“MARKERS”;
静态最终字符串键\u MARKER=“MARKER”;
公共静态列表getStackSitesFromFile(上下文ctx){
//我们将返回的StackSites列表
列出地点;
stackSites=newarraylist();
//分析时当前StackSite的临时保持器
StackSite curStackSite=null;
试一试{
//把我们的工厂和工厂弄来
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
XmlPullParser xpp=factory.newPullParser();
//打开文件的输入流和读取器。
FileInputStream fis=ctx.openFileInput(“StackSites.xml”);
BufferedReader reader=新的BufferedReader(新的InputStreamReader(fis));
//将解析器指向我们的文件。
设置输入(读卡器);
//获取初始事件类型
int eventType=xpp.getEventType();
//循环拉取事件,直到到达END_文档
while(eventType!=XmlPullParser.END_文档){
//获取当前标记
字符串标记名=xpp.getName();
//对不同的事件类型做出适当的反应
开关(事件类型){
case XmlPullParser.START_标记:
if(标记名.equalsIgnoreCase(键标记)){
//如果我们要开始一个新的街区,我们需要
//一个新的StackSite对象来表示它
curStackSite=新StackSite();
}
打破
case XmlPullParser.END_标记:
如果(标记名.equals(键标记)){
字符串title=xpp.getAttributeValue(null,“provincia”);
字符串lat=xpp.getAttributeValue(null,“lat”);
字符串lng=xpp.getAttributeValue(null,“lng”);
网站名称:setTitulo(标题);
地点设置(lat);
现场设置液化天然气(lng);
stackSites.add(curStackSite);
}
打破
违约:
中断;}
//继续下一个迭代
eventType=xpp.next();
}
}捕获(例外e){
e、 printStackTrace();
}
//返回填充的列表。
返回站点;
}
}
使用这个例子,希望能有所帮助。谢谢你的链接,但这些不是我想要的。