Android Studio XmlPullParser 解析多重嵌套元素

Android Studio XmlPullParser parsing multiply nested elements

我的 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>

并且我有 class 个带有我放入 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>