Работа с xml. С чего начать и куда двигаться?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение alek111 » 10.02.2009 20:11:08

Где бы раздобыть какую-нибудь документацию по данному вопросу, хотябы на буржуйском. Туториалы это конечно круто для начала работы, но далее возникает туева хуча вопросов, найти ответ на которые можно только ковыряя исходники, а это ой как долго.
Может от Делфей чего-нибудь можно почитать, или по человечески описанный DOM - какие там структуры данных и какие операции над ними можно выполнять??? Все что я по этому поводу находил из серии: "Использование DOM, для чтения RSS на PHP" и так далее, т.е. примеры кода для непонятного (мне) применения на неудобоваримых (для меня) языках, а общая структура нигде не описана.
Аватара пользователя
alek111
новенький
 
Сообщения: 20
Зарегистрирован: 20.06.2006 16:17:50

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Sergei I. Gorelkin » 10.02.2009 22:26:57

Ну если на буржуйском, то спецификация DOM Level 2, которой стремится соответствовать модуль DOM, находится здесь: http://www.w3.org/TR/DOM-Level-2-Core/
Информация от Дельфей большей частью относится к MSXML, который хоть и похож, но, как это всегда бывает у M$, несколько другой. Вот эта ссылка http://xml.nsu.ru/dom/dom_home.xml тоже MSXML-специфична, зато на русском.
Спецификация DOM определяет только интерфейсы, без указания структур данных. Модуль DOM писался в дремучие времена, когда нормальной поддержки интерфейсов в компиляторе не было, поэтому вместо интерфейсов использует обычные классы.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Ustas » 30.11.2009 14:46:52

...Остановлюсь на это ветке... У меня вопрос, озаглавивший эту ветку форума, остался.
Просмотрев весь форум по теме XML, пришел к выводу, что генеральной линии по работе с XML-файлами нет. Может, конечно я чего и упустил.
Мне нужно прочитать XML-файл, в заголовке которого стоит <?xml version="1.0" encoding="windows-1251"?>. Функция ReadXMLFile сразу говорить, что не поддерживает этот формат. Так, с чего начать?..
Ustas
постоялец
 
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Climber » 30.11.2009 15:20:11

Могу скинуть два класса, которые я написал для себя месяц назад. Кривовато (как и все остальное, что я делаю руками :mrgreen: ), зато работает и написано на паскале.
Классы могут:
1) распарсить xml-файл
2) найти узел по названию
3) сохранить свою структуру в виде xml-файла (мне этого достаточно, чтобы генерировать вордовские документы).
Написано за 4-5 часов. Документации нет, комментариев в коде тоже почти нет.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Sergei I. Gorelkin » 30.11.2009 15:48:44

Ustas писал(а):Мне нужно прочитать XML-файл, в заголовке которого стоит <?xml version="1.0" encoding="windows-1251"?>. Функция ReadXMLFile сразу говорить, что не поддерживает этот формат. Так, с чего начать?..


Вариант 1: подключить к проекту модуль xmliconv (для не-windows платформ), либо xmliconv_windows и положить рядом библиотеку iconv.dll. Тогда ReadXMLFile будет понимать все форматы.
Вариант 2: написать свой декодер только для windows-1251 - по сути, две функции. Как это сделать, написано тут: http://wiki.freepascal.org/XML_Decoders.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Ustas » 30.11.2009 16:49:10

Sergei I. Gorelkin писал(а):
Вариант 1: подключить к проекту модуль xmliconv (для не-windows платформ), либо xmliconv_windows и положить рядом библиотеку iconv.dll. Тогда ReadXMLFile будет понимать все форматы.
Вариант 2: написать свой декодер только для windows-1251 - по сути, две функции. Как это сделать, написано тут: http://wiki.freepascal.org/XML_Decoders.


Не совсем понял, точнее совсем не понял. А по правде сказать... Ладно...

Эти два варианта подразумевают использование iconv.dll?
Ustas
постоялец
 
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Mr.Smart » 30.11.2009 16:50:46

Первый да, а второй нет!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Odyssey » 30.11.2009 17:51:48

Я в своё время нашел отличную библиотеку для Delphi, не требующую никаких DLL - SimpleXML Михаила Власова. Портировал её на FreePascal и немного дополнил, только вот выложить всё никак не собрался. Пока прикладываю архив к сообщению. Лицензия у неё нестандартная, но чем-то похожа на BSD.

В зависимости от опций компиляции, библиотека работает либо с AnsiString либо с WideString. Есть ограничение - после портирования она перестала поддерживать нелатинские символы в именах тегов и атрибутов. Зато если использовать в именах тегов/атрибутов только латиницу, можно прозрачно без перекодировки работать со значениями тегов/атрибутов в UTF-8.

Внешний интерфейс библиотеки -- не DOM-API, а, насколько я понял, совместимый с MSXML. По скорости библиотека уступает FPC-шной, и добавляет достаточно много к объёму исполняемого файла (из-за использования интерфейсов, на которых целиком построен её API). Но для меня всё решили два её свойства -- возможность работы и с cp1251, и с utf-8, и простой исходный код.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Ustas » 01.12.2009 12:17:37

Спасибо за ответы. SimpleXML - модуль занимательный, но у меня кругом латиница. Из всего предложенного попробую с
Вариант 2: написать свой декодер только для windows-1251 - по сути, две функции.

Только с
Как это сделать, написано тут: http://wiki.freepascal.org/XML_Decoders.

у мня возникли проблемы, не написанием процедур (пока... :oops: ), а где они буду заменены. Судя по описанию, то в xmliconv_windows. Что-то я его нигде найти не могу... Можете описать организацию этого вопроса, что и где взять, куда поместить и т.д.?
Ustas
постоялец
 
Сообщения: 153
Зарегистрирован: 19.10.2009 14:58:10
Откуда: г.Муром

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Sergei I. Gorelkin » 01.12.2009 12:39:18

xmliconv_windows лежит рядом с dom и xmlread. Только FPC нужно брать свежий, из транка или 2.4.0rc1.
Заменять ничего не надо, надо написать свой маленький модуль и подключить его к проекту. Заготовка ниже:

Код: Выделить всё
unit conv1251;

interface

implementation

uses
  xmlread;

function Win1251_Decode(Context: Pointer; InBuf: PChar; var InCnt: Cardinal; OutBuf: PWideChar; var OutCnt: Cardinal): Integer; stdcall;
begin
// здесь делается перекодировка из Windows-1251 в utf-16
end;

function GetMyDecoder(const AEncoding: string; out Decoder: TDecoder): Boolean; stdcall;
begin
  if SameText(AEncoding, 'Windows-1251') then
  begin
    Decoder.Decode := @Win1251_Decode;
    Result := True;
  end
  else
    Result := False;
end;

initialization
  RegisterDecoder(@GetMyDecoder);

end.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение inSaNE » 21.11.2013 15:34:45

Sergei I. Gorelkin писал(а):подключить к проекту модуль xmliconv (для не-windows платформ), либо xmliconv_windows и положить рядом библиотеку iconv.dll. Тогда ReadXMLFile будет понимать все форматы.

Sergei I. Gorelkin Сергей, подскажите, пожалуйста! xmliconv_windows в uses добавил, iconv.dll положил. ReadXMLFile всё равно выдает «Encoding windows-1251 is not supported» :( Может еще что-то нужно?
inSaNE
незнакомец
 
Сообщения: 3
Зарегистрирован: 21.11.2013 14:55:09

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Sergei I. Gorelkin » 21.11.2013 16:01:44

У меня не получается воспроизвести - все работает:
Код: Выделить всё
uses
  xmliconv_windows,dom,xmlread;

var
  doc: TXMLDocument; 
begin
  ReadXMLFile(doc, '1251.xml');
  writeln(doc.documentelement.nodename);
  doc.free;
end.

Файл 1251.xml:
Код: Выделить всё
<?xml version="1.0" encoding="windows-1251" ?>
<по-русски/>
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение inSaNE » 21.11.2013 16:49:54

Sergei I. Gorelkin Спасибо! К сожалению, у меня с вашим кодом и вашим же файлом тот же результат. Может у меня iconv.dll неправильная? Откуда её нужно взять?
lazarus: 1.0.10 от 06-09-2013
fpc: 2.6.2

Добавлено спустя 13 минут 8 секунд:
Sergei I. Gorelkin Дело, действительно, оказалось в «плохой» dll.
Взял отсюда:
http://www.gnupg.org/download/iconv.en.html
И всё удалось!
Сергей, спасибо большое за помощь! :)
inSaNE
незнакомец
 
Сообщения: 3
Зарегистрирован: 21.11.2013 14:55:09

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение Sergei I. Gorelkin » 21.11.2013 17:21:22

У меня была установлена iconv.dll версии 1.9.0 в составе gtk.

А вообще официальный сайт - это http://gnuwin32.sourceforge.net/packages/libiconv.htm, оттуда по ссылке "Binaries" скачивается архив, в котором она называется libiconv2.dll, поэтому нужно будет переименовать. Она тоже работает, только что проверил :)
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Работа с xml. С чего начать и куда двигаться?

Сообщение inSaNE » 22.11.2013 09:09:39

Sergei I. Gorelkin Эх, следующие грабли не заставили долго ждать. Я открываю xml с encoding = windows-1251, меняю некоторые значения и затем мне нужно сохранить его опять же в windows-1251. Как это сделать?
WriteXMLFile, получается, пишет все равно в utf-8, вот беда. В XML Tutorial на wiki это подтверждается :( Как же быть? Может быть можно как-то конвертировать потом файл в windows-1251, а encoding = windows-1251 залезть в файл и заменить как строку?
inSaNE
незнакомец
 
Сообщения: 3
Зарегистрирован: 21.11.2013 14:55:09

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 20

Рейтинг@Mail.ru