Lazarus xml windows 1251

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

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

Где бы раздобыть какую-нибудь документацию по данному вопросу, хотябы на буржуйском. Туториалы это конечно круто для начала работы, но далее возникает туева хуча вопросов, найти ответ на которые можно только ковыряя исходники, а это ой как долго.
Может от Делфей чего-нибудь можно почитать, или по человечески описанный 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
Откуда: Зеленоград
  • Профиль
  • ICQ

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

Могу скинуть два класса, которые я написал для себя месяц назад. Кривовато (как и все остальное, что я делаю руками ), зато работает и написано на паскале.
Классы могут:
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
Откуда: Зеленоград
  • Профиль
  • ICQ

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 — по сути, две функции.

Только с

у мня возникли проблемы, не написанием процедур (пока… ), а где они буду заменены. Судя по описанию, то в 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
Откуда: Зеленоград
  • Профиль
  • ICQ

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
Откуда: Зеленоград
  • Профиль
  • ICQ

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. С чего начать и куда двигаться?

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], Yandex [Bot] и гости: 12

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Трансферное обучение с предобученными моделями в Keras с Python

AI_Generated 06.05.2025

Суть трансферного обучения проста: взять модель, которая уже научилась решать одну задачу, и адаптировать её для решения другой, похожей задачи. Мозг человека работает по схожему принципу. Изучив. . .

Циклические зависимости в C#: методы управления и устранения

stackOverflow 06.05.2025

Если вы хоть раз работали над не самым тривиальным проектом на C#, то наверняка сталкивались с той ситуацией, когда компилятор вдруг начинает сыпать странными ошибками о невозможности разрешить. . .

Как перейти от Waterfall к Agile

EggHead 06.05.2025

Каскадная модель разработки Waterfall — классический пример того, как благие намерения превращаются в организационный кошмар. Изначально созданная для упорядочивания хаоса и внесения предсказуемости. . .

Оптимизация SQL запросов — Продвинутые техники

Codd 06.05.2025

Интересно наблюдать эволюцию подходов к оптимизации. Двадцать лет назад всё сводилось к нескольким простым правилам: «Избегайте SELECT *», «Используйте индексы», «Не джойните слишком много таблиц». . . .

Создание микросервисов с gRPC и Protobuf в C++

bytestream 06.05.2025

Монолитные приложения, которые ещё недавно считались стандартом индустрии, уступают место микросервисной архитектуре — подходу, при котором система разбивается на небольшие автономные сервисы, каждый. . .

Многопоточность и параллелизм в Python: потоки, процессы и гринлеты

py-thonny 06.05.2025

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

Конкурентность (concurrency) — это когда ваша программа умеет жонглировать. . .

Распределенное обучение с TensorFlow и Python

AI_Generated 05.05.2025

В машинном обучении размер имеет значение. С ростом сложности моделей и объема данных одиночный процессор или даже мощная видеокарта уже не справляются с задачей обучения за разумное время. Когда. . .

CRUD API на C# и GraphQL

stackOverflow 05.05.2025

В бэкенд-разработке постоянно возникают новые технологии, призванные решить актуальные проблемы и упростить жизнь программистам. Одной из таких технологий стал GraphQL — язык запросов для API,. . .

Распознавание голоса и речи на C#

UnmanagedCoder 05.05.2025

Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление. . .

Реализация своих итераторов в C++

NullReferenced 05.05.2025

Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их. . .

  • XML

  • Delphi

  • Кодировка символов

Добавляю кодировку в XML документ, но она игнорируется:

LDocument :=  NewXMLDocument;
LDocument.Active := True;
LDocument.Version := '1.0';
LDocument.Encoding := 'WINDOWS-1251';
…
LDocument.SaveToFile(ExtractFilePath(Application.ExeName)+'Reports\'+ xmlname +'.xml');

Создает:
<?xml version="1.0"?>Версию проставляет в атрибут а кодировку игнорит. Как решить?


  • Вопрос задан

  • 368 просмотров



2

комментария


Подписаться

1



Простой


2

комментария


Решения вопроса 1

Hemul GM

@HemulGM Куратор тега Delphi

Delphi Developer, сис. админ

LDocument.Encoding := 'WINDOWS-1251';
Потому что эта строка меняет только текст в заголовке xml, поле. (док)

  • А, вот как… А как тогда получить в итоговом документе: <?xml version=»1.0″ encoding=»WINDOWS-1251″ ?>

  • freeeeez, тут и поменяет. Только кодировка файла остается по факту utf-8

  • Hemul GM, нет, не меняет, XML-файл создается <?xml version=»1.0″?>…. так. Кодировка файла мне без разницы, мне надо чтобы был аттрибут encoding=»WINDOWS-1251″

  • реально, работает, если пустой файл создать…
    у меня похоже что то дальше по коду перезаписывает <?xml тег и убирает кодировку, буду разбираться спасибо

  • Hemul GM, вот этот код если убрать то encoding подставляется в <?xml:
    LDocument.XML.Text := XMLDoc.FormatXMLData(LDocument.XML.Text);//форматирование отступов и переносов
    LDocument.Active := True;

    Но без него весь XML идет одной сплошной строкой….

  • Что бы форматировался текст в LDocument.Options -> отметить флажок doNodeAutoIndent

Пригласить эксперта


Ваш ответ на вопрос

Войдите, чтобы написать ответ


Похожие вопросы


  • Показать ещё
    Загружается…

Минуточку внимания

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.

Реклама

Здравствуйте, господа!

Честно говоря, не знаю, кому может пригодиться …

Мне надо было генерировать (для заказчика) и читать (от заказчика) XML в кодовой таблице Window-1251.

1. Опишем русскую кодировку в CPXML.Inc

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

XMLEnc               EQUATE(STRING)
XMLEnc:UTF8          EQUATE('UTF-8')
XMLEnc:UTF16         EQUATE('UTF-16')
XMLEnc:ISO88591      EQUATE('ISO-8859-1')
XMLEnc:WIN1251       EQUATE('WINDOWS-1251')

2. И заставим выводить данные в windows-1251 (CpXML.clw)

DOMToXMLFile procedure(*Document doc, string path, <*CSTRING newLine>, UNSIGNED Format = Format:AS_IS)

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

ret         BYTE
            CODE
            IF omitted(3)
                !ret=DOMToXMLFile(doc,path,,Format,XMLEnc:UTF8)
                ret=DOMToXMLFile(doc,path,,Format,XMLEnc:WIN1251)
            ELSE
                !ret=DOMToXMLFile(doc,path,newLine,Format,XMLEnc:UTF8)
                ret=DOMToXMLFile(doc,path,newLine,Format,XMLEnc:WIN1251)
            END
            RETURN ret

3. После чего получим XML-файл (например, в Example\XMLParse) в кодировке Windows-1251, вполне отображаемый браузером. Но встаёт другая проблема — эти файлы не читаются кларионовским парсером (Шаблон ‘View XML File’ просто падает при загрузке). Ну что ж, тем хуже для парсера. Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст ‘ISO-8859-1’, заменим на ‘WINDOWS-1251’ и добавим в конец ‘<0>’ .

4. Вопрос с документами в UTF-8 не рассматривается

—————————————
C уважением,
Юрий Философов,
Главный программист
Корпорация «Диполь», Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439

(Добавление)

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.

3. После чего получим XML-файл (например, в Example\XMLParse) в кодировке Windows-1251, вполне отображаемый браузером.

Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.

Но встаёт другая проблема — эти файлы не читаются кларионовским парсером (Шаблон ‘View XML File’ просто падает при загрузке). Ну >что ж, тем хуже для парсера.

Может проблема в кодовой странице, о которой писал Сергей Артюшенков.

Возьмём шестнадцатеричный редактор, найдём в модуле C60cpxml.dll текст ‘ISO-8859-1’, заменим на ‘WINDOWS-1251’ и добавим в конец ‘<0>’ .

Я не понял, тогда в этом случае все O’K, что ли?

С уважением, Семен Попов

Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.

Пофиксил. Теперь работают

Когда получил этот результат — обрадовался. Но попробовал, используя их классы создать свой XML, и очень разочаровался. Оказывается, классы напрочь отказываются работать с русскими тегами.

А за это отвечает процедура CheckXMLName из CpXML.clw . Можно поставить в первую строку Return(0) — и будут приниматься любые теги

—————————————
C уважением,
Юрий Философов

Спасибо, попробую.

С уважением, Семен Попов

Когда-то мне пришлось более плотнее исследовать C6 XML Support. Сделал точно такие же изменения как Вы.

Это естественно. Но сгенерированные файлы не читались через Support. Потратил время, чтобы понять причину и добить, как заставить их читаться. О чём и рассказал

Я не понял, тогда в этом случае все O’K, что ли?

По крайней мере, файлы, созданные обычным текстовым редактором или сформированные программой (в том числе без использования интерфейса) читаются, только и всего. Просто похоже, что используемая библиотека в принципе не поддерживает кодировок, отличных от буржуинских, а это самый простой путь заставить это делать…

… исправленные модули для CW6.1 на http://www.tacis-dipol.ru/fil/XML1251.zip

—————————————
C уважением,
Юрий Философов
Написал: ClaList(2)

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Transfer data windows to mac
  • X tension windows 10
  • Сочетание клавиш для разблокировки клавиатуры windows 10
  • Антивинлокер для windows 10
  • Почему не видит жесткий диск после установки windows 10