Парсинг 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. Как...
В части мы рассмотрели как можно пропарсить данные, не используя регулярные выражения. Мы даже написали свою функцию парсинга данных, которую можно будет использовать в данной статье, но я обойдусь без нее, а Вы сможете ею воспользоваться, если конечно захотит...
Ну что, в первой части и во второй части статей, про сохранение данных TStringGrid в файлы и открытие из файла данных, с последующей загрузкой их в TStringGrid, мы поговорили о сохранение и считывание данных из типизированного файла, а также сохранение и считы...