Страница 1 из 5

Урок 79. XmlPullParser. Парсим XML

Добавлено: 16 май 2012, 23:00
damager82
В этом уроке:
- парсим XML с помощью XmlPullParser


Click here to read this article!

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 17 май 2012, 04:31
MeTeOpA
Хорошая вещь... Сам пользуюсь...

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 17 май 2012, 17:14
jenyit
Здравствуйте, просто супер уроки! Большое спасибо вам за них! Есть просьба помогите из спарсиного файла данные занести в БД и вывести к примеру первах 20 файлов в виде списка) Большое спасибо.

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 18 май 2012, 08:50
damager82
jenyit писал(а):Здравствуйте, просто супер уроки! Большое спасибо вам за них! Есть просьба помогите из спарсиного файла данные занести в БД и вывести к примеру первах 20 файлов в виде списка) Большое спасибо.
Не очень понял в чем вопрос :) БД, списки, файлы, парсинг - по всем этим темам есть уроки на сайте. Напишите, что конкретно вызывает у вас затруднения.

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 18 май 2012, 09:38
jenyit
Здравствуйте, пишу конкретнее. Есть XML файл хранящий данные(к примеру телефоны и их там 100 моделей и у каждого есть еще свои какие-то описания: вес цвет и тд.), надо его спарсить и данные занести в БД, причем первых 20 телефонов вывести на экране ввиде списка и в каждом элементе списка должно отображаться модель телефона вес и ешо что нить. СПС :D

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 19 май 2012, 16:15
andev
У вас 3 отдельных задачи.
Вам необходимо создать базу данных, в ней таблицу (желательно несколько, но для простоты хотя бы одну) которая будет содержать ВСЕ возможные параметры телефона, т.е. если, скажем, у вас есть "Nokia 1100, Black" и "Samsung U870 Red Slider 5Mpx" то таблица будет содержать {Brand, model, Color, Type, Camera}, даже если у одного из аппаратов этой информации нет (Nokia без камеры), то в соответствующие поля будет записана информация "-". Можете не придумывать сами, а пройтись по паре каталогов онлайн магазинов, они все уже придумали за вас и поместили в фильтры.
Далее парсинг - я бы создал класс Phone, содержащий все поля, которые может хранить таблица, ArrayList<Phone>, заполнил бы его данными из XML по уроку. Потом в зависимости от того как вы подключаетесь к БД, сформировал бы запрос и выполнил его (занес данные в базу).
После этого задача отображения - тут уже масса вариантов, во что вы хотите выводить и как отображать, но предполагаю, что это будет ListView с переопределенным элементом, в который вы поместите информацию, необходимую для вывода (я очень надеюсь, что не всю, т.к. иначе теряется смысл, лучше всего модель, фото, тип корпуса и разрешение камеры+экрана, все остальные характеристики на отдельную активити по щелчку на списке)

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 08 июн 2012, 13:20
algebra
подскажите пожалуйста
а парсинг HTML с удаленного сайта будет отличаться от парсинга приведенного в этом уроке?

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 13 июн 2012, 09:11
damager82
algebra писал(а):подскажите пожалуйста
а парсинг HTML с удаленного сайта будет отличаться от парсинга приведенного в этом уроке?
Только тем, что данные берете из веба, а не из файла.

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 14 июн 2012, 08:43
vgavt
Тема , как говорится, в тему!
Мне из конторы присылают HTML документ-просто сохраненная интернет страничка.
Делаю следующее(по уроку):
1 Перевожу html в xml с помощью xmlPad.(не по уроку)
2 Закидываю в res/xml.
3 С помощью XmlPullParser'a считываю Info.
4 Далее планировалось переводить все в ListView, но возникла проблема:

Дерево ветвистое получается.Данные которые мне нужны находятся на 14 глубине. Но не беда. Загвоздка в следующем -почему условие по xpp.getDepth() срабатывает,

Код: Выделить всё

if(xpp.getDepth()==14)Log.d(LOG_TAG, "START_TAG: name = " + xpp.getName()
							+ ", depth = " + xpp.getDepth() + ", attrCount = "
							+ xpp.getAttributeCount());
а по xpp.getName() -нет?

Код: Выделить всё

if(xpp.getName()=="phone")Log.d(LOG_TAG, "START_TAG: name = " + xpp.getName()
							+ ", depth = " + xpp.getDepth() + ", attrCount = "
							+ xpp.getAttributeCount());
Подскажите как поступить в этом случае?
Или как парсить сразу html документ с SD Card?

PS интернета у нас нет :lol: . инфу скидывают по INMARSAT C

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 15 июн 2012, 11:59
damager82
vgavt писал(а):Подскажите как поступить в этом случае?
Или как парсить сразу html документ с SD Card?
Попробуйте проверять равенство не с помощью "==", а методом equalsIgnoreCase.

Чтобы парсить док с SD, сначала читаете его в какой-нибудь Reader (урок 75), а потом даете на вход методу xpp.setInput.

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 19 июн 2012, 09:03
smeh
StartDocument срабатывает 2 раза из-за вот этих двух строк:

<?xml version="1.0" encoding="utf-8"?>
<data>

если убрать верхнюю, то будет 1 раз, как у вас и получилось в конечном примере.

Видимо он срабатывает на каждую "<" в "корне"..... имхо...

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 19 июн 2012, 09:32
damager82
smeh писал(а):StartDocument срабатывает 2 раза из-за вот этих двух строк:
Я убираю и у меня все равно два раза.

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 22 июн 2012, 13:06
Stylish2011
А скажите куда конкретно, адрес запроса писать???

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 29 июн 2012, 14:35
damager82
Stylish2011 писал(а):А скажите куда конкретно, адрес запроса писать???
Какого запроса?

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 11 июл 2012, 16:27
rezak90
а умеет ли XmlPullParser парсить [CDATA] блоки? в интернете есть какие то примеры но что то ничего не ясно.

вроде как умеет, но что то ничего не получается, делаю следущее:

Код: Выделить всё

case XmlPullParser.CDSECT:
String localName = xpp.getName(), prefix = xpp.getPrefix(), uri = xpp.getNamespace();
Log.i("MyTag", "CDATA section start, localName = " + localName);
Log.i("MyTag", "CDATA section, prefix = " + prefix);
Log.i("MyTag", "CDATA section, uri = " + uri);
Log.i("MyTag", "CDATA section end, text = " + xpp.getText());
break;
лажа получается, XmlPullParser.CDSECT вылазит на каждом прогоне в цикле и соответственно в логе одни null кроме localName

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 25 июл 2012, 07:22
vgavt
[quote="damager82"][/quote] Cпасибо, заработало!

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 27 авг 2012, 23:53
katso
А есть ли возможность этим парсером получить содержимое всего тега, т.е. есть к примеру xml

Код: Выделить всё

<doc>
 <element>
     <item>
     text1
     </item>
     <item>
     text2
     </item>
 </element>
</doc>
Хочу получить содержимое тега element т.е.

Код: Выделить всё

<item>
     text1
     </item>
     <item>
     text2
</item>

для дальнейшего парсинга!

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 01 сен 2012, 23:20
algebra
Выдает ошибку
main cannot be resolved or is not a field
line 21 setContentView(R.layout.main);
Помогите пожалуйста разобраться

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 03 сен 2012, 01:12
Finch
у те6я есть файл main.xml в папке layouts?

Re: Урок 79. XmlPullParser. Парсим XML

Добавлено: 04 сен 2012, 20:56
algebra
в папке layout а не layouts находится файл activity_main.xml и такой же в папке menu