Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник
Коллекция курьезных вопросов из форумов
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Парcинг XML [D7, XP]


Никифиров И.П.   (20.06.19 13:33

Здравствуйте мастера! Уже пару дней мучусь,кучу примеров нагуглил и ни один этот XML не парсит. Нужно вытянуть пару значений:code_order,create_date,class_man,partnumber и class_cat. Подскажите пожалуйста или накидайте тут парсер для D2010 кому не сложно. Очень нужно! Большое спасибо!

Сам XML:https://dropmefiles.com/nVe0s


Никифиров И.П.   (20.06.19 13:50[1]

Сегодня пробовал так:

Var
 i : integer;
 Node : IXMLNode;
begin
Memo2.Clear;
  XMLDocument1.LoadFromFile('site.xml');
  XMLDocument1.Active := true;
 For I := 0 to XMLDocument1.DocumentElement.ChildNodes.Count -1 do
   Begin
      Node := XMLDocument1.DocumentElement.ChildNodes[i];
      Memo2.Lines.Add(Node.Attributes['code_order']);
      Memo2.Lines.Add(Node.Attributes['create_date']);
      Memo2.Lines.Add(Node.Attributes['class_man']);
      Memo2.Lines.Add(Node.Attributes['partnumber ']);
      Memo2.Lines.Add(Node.Attributes['class_cat']);
   end;
XMLDocument1.Active := false;
end;

При выполнении вылетает ошибка:
" В текстовом комментарии обнаружен недопустимый знак:
<string xmlns="http://www.zzap.ru/">{"er "

Что парсеру не нравится непонятно..? ((


Никифиров И.П.   (20.06.19 15:53[2]

Еще пробовал таким методом добавлять в ListView, вылетает с ошибкой KERNELBASE:
Var
XMLDoc :TXMLDocument;
StartItemNode,ANode: IXMLNode;
STitle,sLink,sDesc:String;
begin
XMLDoc.FileName:='site.xml';
XMLDoc.Active:=True;
StartItemNode:=XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('tabl e');
ANode := StartItemNode;
repeat
 STitle := ANode.ChildNodes['code_order'].Text;
 sLink := ANode.ChildNodes['create_date'].Text;
 sDesc := ANode.ChildNodes['class_man'].Text;
 with ListView1.Items.Add do
 begin
   Caption := STitle;
   SubItems.Add(sLink);
   SubItems.Add(sDesc)
 end;
 ANode := ANode.NextSibling;
until ANode = nil;
end;


Никифиров И.П.   (20.06.19 16:03[3]

Такой вариант тоже приводит к ошибке в текстовом комментарии с недопустимым знаком:
var
 Doc: TXMLDocument;
 Root: IXMLNode;
 PersonList: IXMLNodeList;
 Person: IXMLNode;
 i: Integer;
begin
Memo2.Clear;
 doc := TXMLDocument.Create('site.xml');
 doc.LoadFromFile('');
 Doc.Active := True;
 Root := Doc.DocumentElement;
 PersonList := Root.ChildNodes['table'].ChildNodes;
 Person := PersonList.First;
 while Assigned(Person) do
 begin
   Memo2.Lines.Add(Person.ChildValues['code_order']);
   Memo2.Lines.Add(Person.ChildValues['create_date']);
   Memo2.Lines.Add(Person.ChildValues['class_man']);
   Memo2.Lines.Add(Person.ChildValues['partnumber  e']);
   Memo2.Lines.Add(Person.ChildValues['class_cat']);
   Person := Person.NextSibling;
 end;
end;


ухты ©   (24.06.19 18:31[4]

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


Никифиров И.П.   (25.06.19 09:44[5]

Я написал уже собственный парсер, все работает. Вопрос закрыт. Всем спасибо!


RusSun ©   (25.06.19 09:47[6]

Всем привет.
to Никифиров И.П.
Дело вот в чем XML
Должен нормально открываться браузером и иметь структуру,
тогда он будет нормально читаться.
Данный xml содержит
два нода и строку в виде комментария. Строку, которая вроде как является таблицей, но не читается браузером.

Два варианта: 1 попробовать сделать читабельным xml фаил.
2 парсить только данную строку возможно юзать регулярки.
3 наитии какой то другой вариант.

xml :
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.zzap.ru/">{"error":"","row_count":1,"table":[{"code_order":290587787,"create_date":"2019 -06-20T13:23:05.693","client_name":"̾򮱲᮱멩 k櫱橠ͨ����client_email":"jt rikki@mail.ru","client_phone":"8(999)987-98-95","client_code_region":1,"client_id_hash":"ddb3ccdcc6984c61f5448086272b987a"," qty_order":"6","qty":"6 𲮠","descr_qty":" ΀̈؈Š! ! !","price":"940𮢬"apply":"ϯ졲࡭ᬨ��&# 34920;쨠র森䡱⦰.  ","partnumber":"12237786869","comment":"Ƞ롧 寯. ᥰ決 ZLATA~AUTO Ӗ ͈ѓѬ111 56km ͊D<br/>","class_man":"BMW","logopath":"https://koj.blob.core.windows.net/zzap-upload/upload/logos/s2022f2fa02b65f2288b90a4504136620.png","class_cat":"҂Ɨ ΀ˀ̈ÀΈߢ,"imagepath":"","seller_name":"ZLATA~AUTO Ӗ ͈ѓѬ111 56km ͊D","response":"","client_rating_count":"","client_rating":0,"user_key":"pV 9WvqNPhDkcjny9CJ8Lo2aJRO5/L1AhZEFCsY8EyjZVMYPkFHs4CA==;pV9WvqNPhDk2g1YpdzaNpcqqG/VYF89NdnsZR5qgX0Y=","used":0,"code_template":210025887,"price_name":"zzap.xlsx", "usedV2":false,"applyV2":"ϯ졲࡭ᬨ��表& #51744;র森䡱⦰.","min_sum_order":0.00,"descr_min_sum_ord er":"","shipment":"Ů񲠢렠஠ͮ񪢥 ﲠ390 𠪳𼥰񪮩 믬࡭馩 ௱쥠௫ ﰫ᳻ 롰򳮢,"priceV2":940.00,"descr_priceV2":"940𮢬"price_o rig":940.00,"descr_price_orig":"940.00𮢬"descr_type_price":"","qtyV2":6," qty_max":6,"descr_qtyV2":"6 𲮠","delivery_days":0,"descr_delivery":"΀̈؈Š! ! !"}]}</string>


RusSun ©   (25.06.19 09:49[7]


> мучусь,кучу примеров нагуглил и ни один этот XML не парсит

"Если ключи не походят, возможно стоит взглянуть на замок и его содержимое."


Никифиров И.П.   (25.06.19 15:30[8]

Я написал уже собственный парсер, все работает. Вопрос закрыт. Всем спасибо!


Кщд2 ©   (26.06.19 07:03[9]

>RusSun ©   (25.06.19 09:47) [6]
>Дело вот в чем XML
дело вот в чём: данный XML содержит JSON
автор пытается парсить JSON парсером XML
удивительно, но у него не получается


Никифиров И.П.   (29.06.19 13:51[10]

>Кщд2  А как спарсить JSON,есть компонента для этого в D2010?


Никифиров И.П.   (29.06.19 17:01[11]

Написал код для D2010 по этой статье: https://webdelphi.ru/2011/10/rabota-s-json-v-delphi-2010-xe2, но при выполнении вылетает почему-то сообщение что файл не содержит JSON-данные.. ((

uses DBXJSON;

procedure EnumPairs;
var
i:integer;
begin
Form1.Memo1.Clear;
for I := 0 to Form1.FJSONObject.Size-1 do
Form1.Memo1.Lines.Add(Form1.FJSONObject.Get(i).JsonString.Value);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
S: TStringList;
begin
S:=TStringList.Create;
try
S.LoadFromFile('site.xml');
FJSONObject:=TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(S.Text,0) as TJSONObject;
if Assigned(FJSONObject) then EnumPairs
else
raise Exception.Create('Файл не содержит JSON-данные');
finally
S.Free;
end;
end;


ухты ©   (30.06.19 12:57[12]

Вам же сказали - данный XML содержит JSON, т.е. это xml, только хитрый.
А вы его в парсер JSON, конечно он ничего не поймет.
Либо руками вырезайте содержимое <string>...</string>, либо раз вы уже написали собственный парсер, то после него забирайте. json тут только то что в этом теге.
А еще лучше скажите этим zzap.ru чтобы слали только json и не выкаблучивались)


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо