Задать вопрос

Разбор сложно структурированных XML данных в Android приложении?

Снова здравствуйте уважаемые хабрчане.


Помогите пожалуйста разобрать сложно структурированный xml. Я в Java относительно не так давно, это мое первое приложение.

Суть в следующем, на сервис посылается запрос, и ответ возвращается в виде xml данных. В файле содержится ну оочень много данных, на один запрос возвращается от 100кб xml данных.


Может кто работал уже с такого рода задачами, и подскажет мне как это реализовать.


Буду при много благодарен.


Вот сокращенный образец ответа от сервера:

<?xml version="1.0" encoding="windows-1251"?>
<server xmlns:f="http://www.mysite.ru" >
    <call-r>
        <f:getProjects u="1" >
            <v-r>
                <v>
                    <v k="id" >1174522</v>

                    <v k="name" >Заголовок</v>

                    <v k="descr" >
                        <![CDATA[Какой то текст]]>
                    </v>

                    <v k="category" >2</v>
                    <v k="subcategory" >27</v>
                    <v k="city" ></v>
                    <v k="country" ></v>
                    <v k="cost" >10000</v>
                    <v k="kind" >1</v>
                    <v k="offers_count" >0</v>
                    <v k="pro_only" >1</v>
                    <v k="post_date" >1338117862</v>
                    <v k="currency" >2</v>
                    <v k="logo" ></v>
                    <v k="is_pro" >0</v>
                    <v k="priceby" >4</v>
                    <v k="prefer_sbr" >0</v>
                    <v k="link" >ссылка на файл</v>
                    <v k="link" >ссылка на файл</v>
                    <v k="link" >ссылка на файл</v>
                </v>
                
                <v>
                    <v k="id" >1174522</v>

                    <v k="name" >Заголовок</v>

                    <v k="descr" >
                        <![CDATA[Какой то текст]]>
                    </v>

                    <v k="category" >2</v>
                    <v k="subcategory" >27</v>
                    <v k="city" ></v>
                    <v k="country" ></v>
                    <v k="cost" >10000</v>
                    <v k="kind" >1</v>
                    <v k="offers_count" >0</v>
                    <v k="pro_only" >1</v>
                    <v k="post_date" >1338117862</v>
                    <v k="currency" >2</v>
                    <v k="logo" ></v>
                    <v k="is_pro" >0</v>
                    <v k="priceby" >4</v>
                    <v k="prefer_sbr" >0</v>
                    <v k="link" >ссылка на файл</v>
                    <v k="link" >ссылка на файл</v>
                    <v k="link" >ссылка на файл</v>
                </v>
            </v-r>
        </f:getProjects>

        <f:getProjects u="2" >
            <v-r>
                <v>
                    <v k="id" >1174522</v>

                    <v k="name" >Заголовок</v>

                    <v k="descr" >
                        <![CDATA[Какой то текст]]>
                    </v>

                    <v k="category" >2</v>
                    <v k="subcategory" >27</v>
                    <v k="city" ></v>
                    <v k="country" ></v>
                    <v k="cost" >10000</v>
                    <v k="kind" >1</v>
                    <v k="offers_count" >0</v>
                    <v k="pro_only" >1</v>
                    <v k="post_date" >1338117862</v>
                    <v k="currency" >2</v>
                    <v k="logo" ></v>
                    <v k="is_pro" >0</v>
                    <v k="priceby" >4</v>
                    <v k="prefer_sbr" >0</v>
                    <v k="link" >ссылка на файл</v>
                    <v k="link" >ссылка на файл</v>
                    <v k="link" >ссылка на файл</v>
                </v>
                
                <v>
                    <v k="id" >1174522</v>

                    <v k="name" >Заголовок</v>

                    <v k="descr" >
                        <![CDATA[Какой то текст]]>
                    </v>

                    <v k="category" >2</v>
                    <v k="subcategory" >27</v>
                    <v k="city" ></v>
                    <v k="country" ></v>
                    <v k="cost" >10000</v>
                    <v k="kind" >1</v>
                    <v k="offers_count" >0</v>
                    <v k="pro_only" >1</v>
                    <v k="post_date" >1338117862</v>
                    <v k="currency" >2</v>
                    <v k="logo" ></v>
                    <v k="is_pro" >0</v>
                    <v k="priceby" >4</v>
                    <v k="prefer_sbr" >0</v>
                    <v k="link" >ссылка на файл</v>
                    <v k="link" >ссылка на файл</v>
                    <v k="link" >ссылка на файл</v>
                </v>
            </v-r>
        </f:getProjects>

        
        <f:getMessFolders>
            <v-r>
                <v>
                    <v k="id" >24905</v>
                    <v k="fname" >offtop</v>
                </v>
            </v-r>
        </f:getMessFolders>
    </call-r>
</server>



Задача в том что бы вытащить из этого файла заголовки (тег Заголовок) и само содержимое (тег <![CDATA[Какой то текст]]>) ну и дальше я уже буду манипулировать этими данными.

Не сочтите за наглость, хотелось бы хотя бы кусочек кода увидеть, что бы было от чего оттолкнуться!


Заранее очень благодарен всем!
  • Вопрос задан
  • 3703 просмотра
Подписаться 7 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
@mihaildemidoff
Я бы вам посоветовал посмотреть в сторону Simple Xml.
simple.sourceforge.net/
Все действительно очень просто, примеры охватывают и ваш случай.
Ответ написан
deleted-mifki
@deleted-mifki
Ответ написан
Комментировать
Arktos
@Arktos
Посмотрите JAXB
Допустим хотим прочитать файл constants.xml такого содержания: ideone.com/VbGI8
Создаем класс Constants: ideone.com/EuTNu
Создаем класс Constant: ideone.com/IuKqU
Пример чтения файла: ideone.com/IvDaU
Ответ написан
serso
@serso
Первый способ: как написали выше — использовать JAXB, сами java классы можно нагененрить по XML схеме (если такая имеется).

Второй способ: использовать SAX — потоковый парсер, подходит для парсинга очень больших файлов (основные отличия от JAXB — считываемый файл не полностью загружается в память, что даёт возможность работать с очень большими файлами, > Гб и меппинг XML тегов ложится на программиста).

Если вам нужен только один тег — то однозначно лучше использовать SAX — это будет гораздо эффективнее.
Пример: SAX example in google
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы