Android Studio XmlPullParser 解析多重嵌套元素

标签 android parsing xmlpullparser

我的 XML 文件是这样的:

<Items>
    <Nested_item>
        <id>1</id>
        <name>nested</name>
        <description>
            <desc_item>1</desc_item>
            <desc_item>2</desc_item>
            <desc_item>3</desc_item>
        </description>
     </Nested_item>
     <Nested_item>
        <id>2</id>
        <name>nested2</name>
        <description>
            <desc_item>1</desc_item>
            <desc_item>2</desc_item>
            <desc_item>3</desc_item>
        </description>
     </Nested_item>
     <Nested_item>
        <id>3</id>
        <name>nested3</name>
        <description>
            <desc_item>1</desc_item>
            <desc_item>2</desc_item>
            <desc_item>3</desc_item>
        </description>
     </Nested_item>
</Items>

并且我的类 Items 具有我已放入 ArrayList 的属性,我已经设法解析除 desc_item 之外的所有属性(我需要它作为每个 Item 对象的 ArrayList)。例如,我如何告诉解析器只取第三项,并将这些 desc_item 值作为字符串获取?

最佳答案

我找到了解决问题的方法,我解析了内部数据,然后解析了特定数据:

private ArrayList<Proizvod> parseXML (XmlPullParser parser) throws XmlPullParserException, IOException {

    ArrayList<Proizvod> proizvodLista = null;
    int eventType = parser.getEventType();
    Proizvod proizvod = null;

    while(eventType != XmlPullParser.END_DOCUMENT){

        String name;
        switch (eventType){
            case XmlPullParser.START_DOCUMENT:
                proizvodLista = new ArrayList<Proizvod>();
                break;
            case XmlPullParser.START_TAG:
                name = parser.getName();
                //System.out.println(name);
                if(name.equals("Proizvod")){
                    proizvod = new Proizvod();
                    proizvod.setId(parser.getAttributeValue(null, "id"));
                }else if(proizvod != null){
                    if(name.equalsIgnoreCase("ime_proizvoda")){
                        proizvod.setIme_proizvoda(parser.nextText());
                    }else if(name.equalsIgnoreCase("vrsta_proizvoda")){
                        proizvod.setVrsta_proizvoda(parser.nextText());
                    }else if(name.equalsIgnoreCase("merna_jedinica")){
                        proizvod.setVrsta_proizvoda(parser.nextText());
                    }else if(name.equalsIgnoreCase("Prodavnice")){
                        proizvod.setLista_prodavnica(parsing(parser));
                    }
                }
                break;
            case XmlPullParser.END_TAG:
                name = parser.getName();
                if(name.equalsIgnoreCase("proizvod")&& proizvod !=null){
                    proizvodLista.add(proizvod);
                }
        }
        eventType = parser.next();
    }
    return proizvodLista;
}

private ArrayList<String> parsing (XmlPullParser parser) throws XmlPullParserException, IOException {
    String print = null;
    int eventType = parser.getEventType();
    ArrayList<String> lista = new ArrayList<String>();
    while(eventType != XmlPullParser.END_DOCUMENT){
        String name = parser.getName();
        if(name.equalsIgnoreCase("Prodavnice")){break;}
        else{
            if(eventType==XmlPullParser.START_TAG){
                print = parser.nextText();
                lista.add(print);
                System.out.println(print);
            }
        }
        eventType = parser.next();
    }

    return lista;
}

我的 XML 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Proizvodi>
<Proizvod id="1">
    <ime_proizvoda>Mleko</ime_proizvoda>
    <vrsta_proizvoda>mlecni proizvod</vrsta_proizvoda>
    <merna_jedinica>litar</merna_jedinica>
    <Prodavnice>
        <Prodavnica>1</Prodavnica>
        <Prodavnica>3</Prodavnica>
        <Prodavnica>4</Prodavnica>
    </Prodavnice>
</Proizvod>
<Proizvod id="2">
    <ime_proizvoda>Hleb</ime_proizvoda>
    <vrsta_proizvoda>Pekarski proizvod</vrsta_proizvoda>
    <merna_jedinica>gram</merna_jedinica>
    <Prodavnice>
        <Prodavnica>1</Prodavnica>
        <Prodavnica>2</Prodavnica>
        <Prodavnica>3</Prodavnica>
    </Prodavnice>
</Proizvod>
<Proizvod id="3">
    <ime_proizvoda>Suvi vrat</ime_proizvoda>
    <vrsta_proizvoda>Mesna preradjevina</vrsta_proizvoda>
    <merna_jedinica>gram</merna_jedinica>
    <Prodavnice>
        <Prodavnica>2</Prodavnica>
        <Prodavnica>3</Prodavnica>
        <Prodavnica>4</Prodavnica>
    </Prodavnice>
</Proizvod>
<Proizvod id="4">
    <ime_proizvoda>Pecenica</ime_proizvoda>
    <vrsta_proizvoda>Mesna preradjevina</vrsta_proizvoda>
    <merna_jedinica>100 grama</merna_jedinica>
    <Prodavnice>
        <Prodavnica>1</Prodavnica>
        <Prodavnica>2</Prodavnica>
        <Prodavnica>4</Prodavnica>
    </Prodavnice>
</Proizvod>

关于Android Studio XmlPullParser 解析多重嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51912656/

相关文章:

javascript - 为什么我会收到 ParseError?

c - token 表;从 main.c 中的表获取信息?

android - 解析简单的JSON到android

xml 拉解析器 Assets xml

android - 如何在 Android 上使用 XmlResourceParser 从 Xml 文件中仅获取一个元素的值?

Android SDK 管理器不工作

android - 将复合对象插入 ContentValues

android - XMLPullParser 在 Android 中的异步任务错误中从互联网解析

android - 如何在更改 android 源文件后重建 android 源代码

android - 适用于 iOS 和 Android 的音频格式