Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.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
Java 用XmlPullParser解析xml_Java_Android_Xml_Xml Parsing_Xmlpullparser - Fatal编程技术网

Java 用XmlPullParser解析xml

Java 用XmlPullParser解析xml,java,android,xml,xml-parsing,xmlpullparser,Java,Android,Xml,Xml Parsing,Xmlpullparser,我试图解析这个XML,但我只能加载一个条目(19.12.2011 obed polevka1 Zeleninová7,00 16,00)。 输入内容应类似于[日期][膳食][类型][姓名][价格学生][价格其他] 谢谢你的建议 XML示例: <?xml version="1.0" encoding="utf-8"?> <jidelnicek> <den> <datum>19.12.2011</datum> <o

我试图解析这个XML,但我只能加载一个条目(19.12.2011 obed polevka1 Zeleninová7,00 16,00)。 输入内容应类似于[日期][膳食][类型][姓名][价格学生][价格其他] 谢谢你的建议

XML示例:

<?xml version="1.0" encoding="utf-8"?>
<jidelnicek>
  <den>
    <datum>19.12.2011</datum>
    <obed>
      <polevka1>
        <nazev>Zeleninová</nazev>
        <cena_student>7,00</cena_student>
        <cena_ostatni>16,00</cena_ostatni>
      </polevka1>
      <polevka2>
        <nazev>Krupicová</nazev>
        <cena_student>5,00</cena_student>
        <cena_ostatni>11,00</cena_ostatni>
      </polevka2>
      <stdjidlo1>
        <nazev>Uzená krkovička, dušený špenát, bramborový knedlík</nazev>
        <cena_student>37,00</cena_student>
        <cena_ostatni>77,00</cena_ostatni>
      </stdjidlo1>
      <stdjidlo2>
        <nazev>Ďábelský guláš, houskový knedlík</nazev>
        <cena_student>36,00</cena_student>
        <cena_ostatni>76,00</cena_ostatni>
      </stdjidlo2>
      <stdjidlo3>
        <nazev>Vepřová kýta na slanině, dušená rýže</nazev>
        <cena_student>30,00</cena_student>
        <cena_ostatni>70,00</cena_ostatni>
      </stdjidlo3>
      <bezmjidlo>
        <nazev>Gratinované těstoviny s kuřecím masem a houbovou omáčkou</nazev>
        <cena_student>30,00</cena_student>
        <cena_ostatni>70,00</cena_ostatni>
      </bezmjidlo>
      <sladkejidlo>
        <nazev>Palačinky s džemem, jahodami a šlehačkou</nazev>
        <cena_student>29,00</cena_student>
        <cena_ostatni>59,00</cena_ostatni>
      </sladkejidlo>
      <specialita1>
        <nazev>Kuřecí paličky po Mexicku, jasmínová rýže</nazev>
        <cena_student>44,00</cena_student>
        <cena_ostatni>84,00</cena_ostatni>
      </specialita1>
      <specialita2>
        <nazev>Vepřová kýta se švestkovou  omáčkou, houskový knedlík</nazev>
        <cena_student>31,00</cena_student>
        <cena_ostatni>71,00</cena_ostatni>
      </specialita2>
      <salat>
        <nazev>Cesar salát s kousky mozzarelly</nazev>
        <cena_student>36,00</cena_student>
        <cena_ostatni>76,00</cena_ostatni>
      </salat>
    </obed>
    <vecere>
      <polevka1>
        <nazev>Houbová hnědá</nazev>
        <cena_student>7,00</cena_student>
        <cena_ostatni>14,00</cena_ostatni>
      </polevka1>
      <polevka2>
        <nazev>Česnečka s bramborem</nazev>
        <cena_student>5,00</cena_student>
        <cena_ostatni>11,00</cena_ostatni>
      </polevka2>
      <stdjidlo1>
        <nazev>Srbský vepřový plátek, houskový knedlík</nazev>
        <cena_student>31,00</cena_student>
        <cena_ostatni>71,00</cena_ostatni>
      </stdjidlo1>
      <stdjidlo2>
        <nazev>Kuřecí perkelt dušená rýže</nazev>
        <cena_student>31,00</cena_student>
        <cena_ostatni>71,00</cena_ostatni>
      </stdjidlo2>
      <stdjidlo3>
        <nazev>Těstoviny s rajskou omáčkou a sýrem</nazev>
        <cena_student>22,00</cena_student>
        <cena_ostatni>62,00</cena_ostatni>
      </stdjidlo3>
      <bezmjidlo>
        <nazev>Variace listových salátů s kuřecími nugetkami</nazev>
        <cena_student>30,00</cena_student>
        <cena_ostatni>70,00</cena_ostatni>
      </bezmjidlo>
    </vecere>
  </den>
</jidelnicek>

19.12.2011
泽列尼诺娃
7,00
16,00
克鲁皮科娃
5,00
11,00
乌泽纳科维奇卡、杜舍纳什·佩纳特、布朗布罗夫·克内德里克
37,00
77,00
贝尔斯克·古拉什,霍斯科夫·克内德利克
36,00
76,00
维普·奥瓦卡·塔纳·斯兰宁,杜塞纳·鲁日兹
30,00
70,00
格拉蒂诺瓦内·托维尼·库埃西姆·马塞姆·霍博沃·奥马库
30,00
70,00
帕拉钦基南德žemm,jahodami ašlehačkou
29,00
59,00
墨西哥人,贾斯米诺夫·拉齐耶
44,00
84,00
维普·奥瓦克塔·塞斯维斯特科沃·奥马库,霍斯科夫·克内德里克
31,00
71,00
塞萨尔·萨拉特·库斯基·莫扎雷利
36,00
76,00
霍博瓦恩·达阿
7,00
14,00
Česnečka s bramborem
5,00
11,00
斯尔布斯克·维普·奥夫·普拉泰克、霍斯科夫·克内德利克
31,00
71,00
库埃西佩克尔特·杜舍纳尔ýýýže
31,00
71,00
Těstoviny s rajskou omáčkou a sýrem
22,00
62,00
易变的listových salátůs kuřecími nugetkami
30,00
70,00
我的解析器whis是基于代码的

package com.example.android.networkusage;
导入android.util.Xml;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserException;
导入java.io.IOException;
导入java.io.InputStream;
导入java.util.ArrayList;
导入java.util.List;
公共类StackOverflowXmlParser{
私有静态最终字符串ns=null;
公共列表解析(InputStream in)抛出XmlPullParserException,IOException{
试一试{
XmlPullParser=Xml.newPullParser();
setFeature(XmlPullParser.FEATURE_进程_名称空间,false);
setInput(in,null);
parser.nextTag();
返回readFeed(解析器);
}最后{
in.close();
}
}
私有列表readFeed(XmlPullParser解析器)抛出XmlPullParserException,IOException{
列表项=新的ArrayList();
require(XmlPullParser.START_标记,ns,“jidelnicek”);
while(parser.next()!=XmlPullParser.END_标记){
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
String name=parser.getName();
如果(名称等于(“den”)){
add(readEntry(解析器));
}否则{
跳过(解析器);
}
}
返回条目;
}
公共静态类条目{
公开最终字符串日期;
公共最后一餐;
公共最终字符串类型;
公共最终字符串名;
公立大学学生;
公开最终字符串价格_其他;
私人条目(字符串日期、字符串膳食、字符串类型、字符串名称、字符串价格\学生、字符串价格\其他){
this.date=日期;
这顿饭;
this.type=type;
this.name=名称;
this.price\u student=price\u student;
this.price_other=price_other;
}
}
私有条目readEntry(XmlPullParser解析器)抛出XmlPullParserException,IOException{
require(XmlPullParser.START_标记,ns,“den”);
字符串日期=空;
字符串=null;
字符串类型=null;
字符串名称=null;
字符串price_student=null;
字符串price_other=null;
while(parser.next()!=XmlPullParser.END_标记){
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
字符串sname=parser.getName();
如果(sname.equals(“基准”)){
日期=读取日期(解析器);
}else如果((sname.equals(“obed”))|(sname.equals(“vecere”)){
膳食=小吃;
}else如果((sname.equals(“polevka1”))|(sname.equals(“polevka2”))
||(sname.equals(“stdjidlo1”)| |(sname.equals(“stdjidlo2”)| |(sname.equals(“stdjidlo3”))
||(sname.equals(“bezmjidlo”))
||(sname.equals(“sladkejidlo”))
||(sname.equals(“特殊条款1”))
||(sname.equals(“特殊条款2”))
||(sname.equals(“salat”))
) {
类型=sname;
}否则如果(sname.equals(“nazev”)){
name=readName(解析器);
}否则如果(sname.equals(“cena_学生”)){
price\u student=readPrice\u student(解析器);
}else if(sname.equals(“cena_ostatni”)){
price_other=readPrice_other(解析器);
}
否则{
跳过(解析器);
}
}
返回新条目(日期、膳食、类型、姓名、学生价格、其他价格);
}
私有字符串readDate(XmlPullParser解析器)引发IOException,XmlPullParserException{
require(XmlPullParser.START_标记,ns,“datum”);
字符串title=readText(解析器);
require(XmlPullParser.END_标记,ns,“datum”);
返回标题;
}
私有字符串readName(XmlPullParser解析器)引发IOException,XmlPullParserException{
require(XmlPullParser.START_标记,ns,“nazev”);
字符串title=readText(解析器);
require(XmlPullParser.END_标记,ns,“nazev”);
返回标题
package com.example.android.networkusage;

import android.util.Xml;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class StackOverflowXmlParser {
    private static final String ns = null;

    public List<Entry> parse(InputStream in) throws XmlPullParserException, IOException {
        try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(in, null);
            parser.nextTag();
            return readFeed(parser);
        } finally {
            in.close();
        }
    }

    private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
        List<Entry> entries = new ArrayList<Entry>();

        parser.require(XmlPullParser.START_TAG, ns, "jidelnicek");
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String name = parser.getName();

            if (name.equals("den")) {
                entries.add(readEntry(parser));
            } else {
                skip(parser);
            }
        }
        return entries;
    }

    public static class Entry {
        public final String date;
        public final String meal;
        public final String type;
        public final String name;
        public final String price_student;
        public final String price_other;

        private Entry(String date, String meal, String type, String name, String price_student, String price_other) {
            this.date = date;
            this.meal = meal;
            this.type = type;
            this.name = name;
            this.price_student = price_student;
            this.price_other = price_other;

        }
    }

    private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
        parser.require(XmlPullParser.START_TAG, ns, "den");
        String date = null;
        String meal = null;
        String type = null;
        String name = null;
        String price_student = null;
        String price_other = null;
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String sname = parser.getName();
            if (sname.equals("datum")) {
                date = readDate(parser);


                }  else if ((sname.equals("obed"))||(sname.equals("vecere"))) {

                meal = sname;

            }  else if ((sname.equals("polevka1"))||(sname.equals("polevka2"))
                    ||(sname.equals("stdjidlo1"))||(sname.equals("stdjidlo2"))||(sname.equals("stdjidlo3"))
                    ||(sname.equals("bezmjidlo"))
                    ||(sname.equals("sladkejidlo"))
                    ||(sname.equals("specialita1"))
                    ||(sname.equals("specialita2"))
                    ||(sname.equals("salat"))
                    ) {
                type = sname;
            } else if (sname.equals("nazev")) {
                name = readName(parser);
            } else if (sname.equals("cena_student")) {
                price_student = readPrice_student(parser);
            } else if (sname.equals("cena_ostatni")) {
                price_other = readPrice_other(parser);
            }
else {
                skip(parser);
            }
        }
        return new Entry(date, meal, type, name, price_student, price_other);
    }

    private String readDate(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG, ns, "datum");
        String title = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "datum");
        return title;
    }

    private String readName(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG, ns, "nazev");
        String title = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "nazev");
        return title;
    }

    private String readPrice_student(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG, ns, "cena_student");
        String title = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "cena_student");
        return title;
    }

    private String readPrice_other(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG, ns, "cena_ostatni");
        String title = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "cena_ostatni");
        return title;
    }

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

    private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
        if (parser.getEventType() != XmlPullParser.START_TAG) {
            throw new IllegalStateException();
        }
        int depth = 1;
        while (depth != 0) {
            switch (parser.next()) {
            case XmlPullParser.END_TAG:
                    depth--;
                    break;
            case XmlPullParser.START_TAG:
                    depth++;
                    break;
            }
        }
    }
}
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
    // ...
    while (parser.next() != XmlPullParser.END_DOCUMENT) {
    // ...
}