В этой статье хотел просто сказать, а точнее сделать для себя как будем парсить очень легко данные XML. Это делается для проекта VK API в Delphi, так как в каждой, рассмотренной статье по ВК API мы в основном получаем данные в формате XML, так что для удобства мы и сделаем этот небольшой парсинг. Можно сделать в виде функции, в виде просто класса как кому удобно. Ну что приступим. В нашей функции будем указывать только тег, между которым парсить (получать) данные, причем будем указывать его только название без угловых скобок, опять же для нашего же удобства, знаем между каким тегом получить данные — написали его имя и все данные получены. Все это также можно оформить в виде отдельного модуля, чтобы в дальнейшем можно было использовать в своих проектах, где необходим парсинг данных.

Также хотел предложить для проекта VK API парсер в цикле, то есть результатом значений может быть XML, где теги повторяются, то есть массив данных — разных значений. Это тоже для более удобной работы, чтобы нам каждый раз не проходить в цикле и не забирать данные. В принципе здесь ничего сложного нету, в следующей статье я расскажу как сделать тот же самый парсер XML-файлов, только с использованием регулярных выражений, думаю будет работать намного быстрее чем этот, и возможно его тогда будет заменить данным парсером. Но сейчас такой небольшой класс объявил я. Да конечно я создал сперва модуль (File-New-Unit)

type
 TParserXML=class
  public
   function ParsXML(XML,tag:WideString):WideString;
   function ParsXMLArr(XML,tag:WideString):TStrings;
end;

Первая функция будет отвечать за парсер только одно тега, то есть укажем между каким тегом получать данные — между этим и получим (если их много, одинаковых, то между первым найденным). Вторая функция получает все найденные данные между тегом, то есть если данных под одним и тем же тегом много, то оно получит их все. Первая функция выглядит у меня так

function TParserXML.ParsXML(XML,tag: WideString): WideString;
begin
   Delete(XML,1,pos('<'+tag+'>',XML)+length('<'+tag+'>')-1);
   Delete(XML,pos('</'+tag+'>',XML),length(XML));
   Result:=XML;
end;

Ну и сама функция для получения массива данных, выглядит у меня следующим образом

function TParserXML.ParsXMLArr(XML, tag: WideString): TStrings;
var
 ParsTag:TParserXML;
 i:integer;
begin
   try
    Result:=TStringList.Create;
    ParsTag:=TParserXML.Create;
    i:=1;
    while (i<=length(XML)) do
     begin
      if pos('<'+tag+'>',XML)<>0 then
       begin
        Result.Add(ParsTag.ParsXML(XML,tag));
        Delete(XML,1,pos('</'+tag+'>',XML));
        i:=0;
       end;
      inc(i);
     end;
    ParsTag.Free;
   finally
   end;
end;

Ну использовать для одиночных тегов можно так

logVK:=ParsXML.ParsXML(logVK,'count');

Ну естественно вначале необходимо создать объект класса, а затем уже использовать функции, а использование для получения массива данных можно использовать так

ListBox8.Items:=ParsXML.ParsXMLArr(logVK,'src_big');

Можно также получить данные через запятую, все параметры, передаваемые в данные функции — это сам результат XML-данных и тег без угловых скобок, между которым необходимо парсить данные, данный парсер мы будем использовать в проекте VK API в Delphi.

Кстати, хочу сказать, что в газете «Быть добру» Вы найдете очень много интересного, а главное как правильно вести здоровый образ жизни.

Скачать его можно тут

Автор статьи - Andrey53

Метки: , , , , ,




К записи “Парсинг XML-данных” оставлено комментариев: 7.

  1. Сергей:

    Интересно, а если попытаться парсить твоими чудО-парсером XML где несколько РАЗНЫХ тегов? или XML размером 100-200 мегов?
    :)

  2. uranic:

    Зачем изобретать велосипед? есть куча бесплтаных парсеров (например в JCL)? которые работают на порядок быстрее

  3. Vlad:

    Для решения КОНКРЕТНОЙ задачи, как, например, в VK API может такой подход и сгодиться на первое время, а вообще такое «изобретение велосипеда» ни к чему.
    Если надо парсить XML, то в Delphi уже давным-давно есть модуль msxml.pas — быстро и, в целом, достаточно удобно.
    Если надо уменьшить размер исходника в плане количества строк — NativeXML — работает шустро (по крайней мере меня скорость вполне устраивает) и опять же удобно. Разобраться тоже много времени не требуется. Ну и, на крайний случай, есть ещё куча всяких парсилок, библиотек, компонентов для XML — стоит только попросить Google их найти.

  4. […] Andrey53 пишет: Это делается для проекта VK API в Delphi, так как в каждой, рассмотренной статье по ВК API мы в основном получаем данные в формате XML, так что для удобства мы и сделаем этот небольшой парсинг. Можно сделать в виде функции, … […]

  5. […] мы рассмотрели как нам можно лучше сделать парсинг XML-данных. Так как мы очень часть получаем результат в виде XML, то […]

  6. Andrey53:

    2Сергей это я привел как еще один вариант парсинга данных, а вот уже насчет размера тут конечно надо другое, а насчет тегов разных проблемы какие? тег нужный передаешь он тебе будет парсить, главное в цикл запустить это все дело

Оставить комментарий

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*