Предлагаю вам другую версию парсера 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.