Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用XmlPullParser解析属性?_Android_Xml_Xmlpullparser - Fatal编程技术网

Android 如何使用XmlPullParser解析属性?

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(),我发现了这个,但我不太明白。你

我有以下xml结构:

<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();
}
//返回填充的列表。
返回站点;
}
}

使用这个例子,希望能有所帮助。谢谢你的链接,但这些不是我想要的。