Android xml анализирует отсутствующие теги - PullRequest
0 голосов
/ 21 марта 2012

Я пытаюсь разобрать xml-файл, используя dom parser. XML-файл содержит множество пропущенных тегов. Что я хочу сделать, так это то, что если я получу какой-либо отсутствующий тег (как в примере ниже, тег второго художника не содержит тега изображения), я хочу установить строковое изображение как некоторое значение, например «na», чтобы я мог поместить значения в массив или список.

Ниже приведен пример

<list>
<artist>
<id>1</id>
<name>name1</name>
<image>name1.jpg</image>
</artist>
<artist>
<id>2</id>
<name>name2</name>
</artist>
</list>

Мой текущий код:

        NodeList list = element.getElementsByTagName("artist");
        if (list != null && list.getLength() > 0) {
            for (int i = 0; i < list.getLength(); i++) {

                Node item = list.item(i);

                NodeList properties = item.getChildNodes();

                for (int j = 0; j < properties.getLength(); j++) {

                    Node property = properties.item(j);

                    String name = property.getNodeName();

                    if (name.equalsIgnoreCase("__id")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null ID");
                        }

                    }

                    else if (name.equalsIgnoreCase("__name")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null Name");
                        }

                    }

                    else if (name.equalsIgnoreCase("__image")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null Image");
                        }

                    }
                }`

1 Ответ

1 голос
/ 21 марта 2012

Добавьте переменную String, установленную по умолчанию, назначенную непосредственно перед входом в цикл, который анализирует дочерние теги Artist. Затем в вашем цикле, если вы найдете дочерний элемент изображения, замените эту переменную String указанным значением.

Редактировать: код на основе оригинала:

        NodeList list = element.getElementsByTagName("artist");
        if (list != null && list.getLength() > 0) {
            for (int i = 0; i < list.getLength(); i++) {

                Node item = list.item(i);

                NodeList properties = item.getChildNodes();

                String strImage = "na"; // default

                for (int j = 0; j < properties.getLength(); j++) {

                    Node property = properties.item(j);

                    String name = property.getNodeName();

                    if (name.equalsIgnoreCase("__id")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null ID");
                        }

                    }

                    else if (name.equalsIgnoreCase("__name")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null Name");
                        }

                    }

                    else if (name.equalsIgnoreCase("__image")) {

                        try {

                            String strTitle = property.getFirstChild()
                                    .getNodeValue();
                                                            strImage = strTitle;
                            System.out.println(strTitle);

                        } catch (NullPointerException e) {
                            // TODO: handle exception

                            System.out.println("Null Image");
                        }

                    }
                }
            }
            System.out.println("Image: " + strImage);
...