Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Библиотеки

Ответ
 
Опции темы
Старый 29.10.2010, 13:44   #1
odd
Мастер
 
Аватар для odd
 
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений
(для 713 пользователей)
Lib_xml2 Другая версия парсера XML документов

Предлагаю вам другую версию парсера XML документа. Главное отличие данного парсера от Lib_xml состоит в том, что можно парсить не весь XML документ и потом в этой каше искать нужные параметры, а пробежаться по документу и достать только нужные параметры в нужных тегах.

Работа с библиотекой очень простая, в библиотеке всего 4 команды:

string load(s: string) - Загрузить XML документ в библиотеку

integer read - Команда просто читает очередной тег из XML документа
Если тег был прочитан нормально, то возвратится значение 1
В противном случае (XML документ закончился) возвратится 0

string name - Возвращает имя прочитанного тега

string attr(a: string) - Возвращает значение атрибута под названием a для ранее прочитанного тега

Внимание! Если какой-то текст содержится между тегами (например, "<b>Жирный текст</b>"), то он будет
определяться как тег с именем #TEXT, а сам текст можно получить запросив значение атрибута value.
Комментарии определяются как тег #COMMENT, текст комментария доступен также через атрибут value.

Библиотека НЕ использует никаких специальных JSRов для работы с XML поэтому будет работать на любом телефоне.

Пример: Допустим мы имеем примерно такой XML документ (взято из Википедии):
<?xml version="1.0" encoding="UTF-8"?>
<recipe name="хлеб" preptime="5" cooktime="180">
  <title>Простой хлеб</title>
  <ingredient amount="3" unit="стакан">Мука</ingredient>
  <ingredient amount="0.25" unit="грамм">Дрожжи</ingredient>
  <ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient>
  <ingredient amount="1" unit="чайная ложка">Соль</ingredient>
  <instructions>
   <step>Смешать все ингредиенты и тщательно замесить.</step>
   <step>Закрыть тканью и оставить на один час в тёплом помещении.</step>
   <!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... -->
   <step>Замесить ещё раз, положить на противень и поставить в духовку.</step>
  </instructions>
</recipe>
Предположим, нам нужно сначала вывести на экран список ингредиентов, а затем текст самого рецепта. В таком случае программа будет выглядеть примерно так:

Program XML2test;
Uses xml2;
Var s, t: string;
i, y: integer;

Begin
    s:='<?xml version="1.0" encoding="UTF-8"?><recipe name="хлеб" preptime="5" cooktime="180"><title>Простой хлеб</title><ingredient amount="3" unit="стакан">Мука</ingredient><ingredient amount="0.25" unit="грамм">Дрожжи</ingredient><ingredient amount="1.5" unit="стакан">Тёплая вода</ingredient><ingredient amount="1" unit="чайная ложка">Соль</ingredient><instructions><step>Смешать все ингредиенты и тщательно замесить.</step><step>Закрыть тканью и оставить на один час в тёплом помещении.</step><!-- <step>Почитать вчерашнюю газету.</step> - это сомнительный шаг... --><step>Замесить ещё раз, положить на противень и поставить в духовку.</step></instructions></recipe>';
    xml2.load(s); // Загружаем XML документ
    y:=0;
    
    // Пример #1 - вывод на экран столбика игридиентов
    while (xml2.read > 0) do // Читаем пока можно читать
    begin
        if (xml2.name = 'ingredient') then
        begin
            t := '' + xml2.attr('amount') + ' ' + xml2.attr('unit');
            i := xml2.read;
            t := t + ' ' + xml2.attr('value');
            DrawText(t, 5, y);
            y:=y+GetStringHeight('W');
        end;
    end;
    
    Repaint; Delay(5000);
    SetColor(255, 255, 255); FillRect(0, 0, GetWidth, GetHeight);    SetColor(0, 0, 0);
    
    // Пример #2 - вывод на экран самого рeцепта
    xml2.load(s);
    y:=0;
    while (xml2.read > 0) do // Читаем пока можно читать
    begin
        if (xml2.name = 'step') then
        begin
            i := xml2.read;
            DrawText(xml2.attr('value'), 5, y);
            y:=y+GetStringHeight('W');
        end;
    end;
    
    Repaint; Delay(5000);
End.
Вложения
Тип файла: zip Lib_xml2.zip (1.9 Кб, 474 просмотров)
Тип файла: zip XML2test.zip (4.3 Кб, 464 просмотров)
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
AVL (27.02.2011), GRAY_WOLF (07.11.2010)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 11:56.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com