Парсинг XML-данных

4 минуты на чтение

В этой статье хотел просто сказать, а точнее сделать для себя как будем парсить очень легко данные 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.

Facebook Vk Ok Twitter LinkedIn Telegram

Похожие записи:

Продолжаем работу с базами данных. На этот раз, хотел бы рассмотреть фильтрацию данных в БД. Вообще, хотелось бы поговорить, для чего она предназначена, а также способы фильтрации данных, другими словами поиска данных в БД, с использованием технологии ADO. Как...
База данных в Delphi - это коллекция структурированных данных, которые могут быть организованы, хранены, обновлены и извлечены с помощью специальных программных средств. В Delphi вы можете использовать различные типы баз данных, включая локальные и удаленные б...
Delphi - это интегрированная среда разработки программного обеспечения (IDE) для создания Windows-приложений на языке Object Pascal. Delphi имеет встроенную поддержку для работы с базами данных через различные компоненты и библиотеки. В Delphi для работы с баз...