Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Parsing XML файла. Файл не соответствует стандарту? 
:(
    Опции темы
iddqd
Дата 27.6.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Есть xml файл. В нём находится необходимая информация о пользоватиле + фотография + подпись. необходимо получить все поля из файла.
Пробывал несколько парсеров, но неодин не читает файл. Показывает только "юя" в начале файла. Если из файла это удалить, то он становится вобще не читабельным.
Как мне поступить в данном случае? 

Забыл добавить сам файл.
Вот ссылки, т.к. на форум залить не получается.
http://slil.ru/22876587
http://rapidshare.de/files/24247717/Smirnova.rar.html 

Это сообщение отредактировал(а) iddqd - 27.6.2006, 11:33


--------------------
PM MAIL   Вверх
comtat
Дата 27.6.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 3
Всего: 71



А какими парсерами пользовался например ??
Пробовал ли XML Parser, XMLDocument - очень неплохая вещь ?? 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
iddqd
Дата 27.6.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



1) стандартный Дельфийско-Микрософтовский парсер (TXmlDocument)
2) ECXML  
3) Native XML (http://www.simdesign.nl/xml.html)
4) MVRB XML, XML Documents Parser (© 2002 Равиль Батыршин.) с Torry (http://www.torry.net/vcl/internet/html/mvrbxmlparsers.zip)
5) Jan XML Parser2 (http://www.torry.net/vcl/internet/html/janxmlparser2.zip)

Читал другие топики на форуме. Ссылкпи взяты оттуда. 


--------------------
PM MAIL   Вверх
drkot
Дата 27.6.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Файл xml сохренен в формате юникод половина проблем отсюда (далеко не все парсеры поддерживают юникод) 
 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
iddqd
Дата 27.6.2006, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Да, это я понял.
Можешь посоветовать какой-нибудь, который поддерживает его? 


--------------------
PM MAIL   Вверх
drkot
Дата 27.6.2006, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Попробовал обработать твой файлик стандартным парсером (XMLDocument) проблем никаких не возникло. Все работает на ура.

ЗЫЖ МИД это прикольно. 

подтверждение моих слов во вложении 

Это сообщение отредактировал(а) drkot - 27.6.2006, 14:20

Присоединённый файл ( Кол-во скачиваний: 66 )
Присоединённый файл  Resize_of_1234.jpg 48,24 Kb


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
iddqd
Дата 27.6.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Можно твою тестовую программу заполучить? 


--------------------
PM MAIL   Вверх
drkot
Дата 27.6.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Модуль обработки сгенерирован XML Builder (встроен в делфю) 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
iddqd
Дата 27.6.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Я имею в виду сам код, как ты пользовался TXMLDocument.

Добавлено @ 15:12 
Ты автоматически сгенерировал код из дельфи для этого файла.
1. Как получить допустим поле картинки?
2. Будет ли оно точно также работать для другого файла xml с такой же структурой, но другими данными?

PS: Я знаю. один топик, один вопрос. Но переносить вопросы, относящиеся к этому топику в другой не имеет смысла.

 


--------------------
PM MAIL   Вверх
drkot
Дата 27.6.2006, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



примерно так
Код

var
  i:integer;
  str: string;
  pc1,pc2: array of char;
  fs: TFileStream;
begin
  XMLDocument:=TXMLDocument.Create('smirnova.xml');
  XMLProduction:=GetProductionQuery(XMLDocument);
  XMLQuery:=XMLProduction.Query;
  XMLPassport:=XMLQuery.Passport;
  XMLPrintable:=XMLPassport.Printable;
  str:=XMLPrintable.Surname.Russian;
  i:=XMLPrintable.PassportNumber;
  str:=XMLPrintable.HolderPortrait;
  i:=length(str)div 2;
  setlength(pc2, i);
  HexToBin(PChar(str), PChar(pc2), i);
  fs:= TFileStream.Create('1234.bmp', fmCreate);
  fs.WriteBuffer(pc2[0], i);
  fs.Free;
  Memo1.Lines.Add(inttostr(i));
end;
 


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
iddqd
Дата 27.6.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Код

  XMLProduction:=GetProductionQuery(XMLDocument);
  XMLQuery:=XMLProduction.Query;
  XMLPassport:=XMLQuery.Passport;
  XMLPrintable:=XMLPassport.Printable;


Что это за переменные? 


--------------------
PM MAIL   Вверх
iddqd
Дата 27.6.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Разобрался самостоятельно, спасибо smile

Добавлено @ 16:05 
+1 


--------------------
PM MAIL   Вверх
iddqd
Дата 8.9.2006, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Поднимаю снова этот вопрос.
Не вижу смысла создавать отдельную тему.
Сейчас у меня в xml файле с точно такой же структурой не одна запись, а 2 и более.
Вот xml файл: 
http://rapidshare.de/files/32366241/test.rar.html
или
http://getfile.biz/47722
Я сгенерировал для него код, с поощью XMLBuilder дельфийского.
И обращаюсь к полям так:
Код

procedure TForm8.Button1Click(Sender: TObject);
var
  i: integer;
  str: string;
  pc2: array of char;
  fs: TFileStream;
  st: TMemoryStream;
  Bmp: TBitmap;
  XMLPrintable: IXMLPrintableType;
  XMLProduction: IXMLProductionQueryType;
  XMLQuery: IXMLQueryType;
  XMlPassport: IXMLPassportType;
begin
  XMLDocument:= TXMLDocument.Create('test.xml');
  XMLProduction:= GetProductionQuery(XMLDocument);
  XMLQuery:= XMLProduction.Query;
  XMLPassport:= XMLQuery.Passport[1]; //здесь изменяется индекс для обращения к нужной записи
  XMLPrintable:= XMLPassport.Printable;
  //Caption:= XMLPrintable.Surname.Russian;
  Str:= XMLPrintable.HolderPortrait;
  i:= Length(Str) div 2;
  SetLength(pc2, i);
  HexToBin(PChar(Str), PChar(pc2), i);
  fs:= TFileStream.Create('portrait.bmp', fmCreate);
  fs.WriteBuffer(pc2[0], i);
  fs.Free;
  Str:= XMLPrintable.HolderSignature;
  i:= Length(Str) div 2;
  SetLength(pc2, i);
  HexToBin(PChar(Str), PChar(pc2), i);
  fs:= TFileStream.Create('sign.bmp', fmCreate);
  fs.WriteBuffer(pc2[0], i);
  fs.Free;
end;


При изменении индекса, который указан в коде все данные получаются нормально, кроме фотографии и подписи. Эти файлы пустые smile
Нормально получаются фото и подпись только для первой записи, с индексом 0.
Почему с остальными проблема?


--------------------
PM MAIL   Вверх
drkot
Дата 11.9.2006, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Скорее всего неправильно сгенерирован интерфейсный модуль.
Смотри внимательно на параметры генерации.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
iddqd
Дата 11.9.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Ммм, где мне на них смотреть?
По-моему там только путь к файлу выбрать можно.
У тебя у самого всё работает и фотку нормально показывает?


--------------------
PM MAIL   Вверх
drkot
Дата 12.9.2006, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Ошибка в 23 строке (это не шутка).
Проблемы связаны с кодировкой (utf8) я рекомендую использовать 1251.
В прочитаной строке (закодированая графика) вначале находятся символы перевода строки что и приводит к збою в преобразовании hextobin. Появление непечатных символов вызвано структурой исходного файла (парсер генератор и делфяшный видать не совместимы) .
Выход: проверять на наличие ошибочных символов.
Это хорошо видно в дебагере и исходном xml.

Цитата(iddqd @  11.9.2006,  19:26 Найти цитируемый пост)
Ммм, где мне на них смотреть?

после того как, визард составил структуру файла можно менять названия, типы и методы доступа для всех элементов


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0547 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.