Работа с xml. С чего начать и куда двигаться?
Модератор: Модераторы
Работа с xml. С чего начать и куда двигаться?
Задача: формирование отчетности в налоговую в электронном виде. По шагам:
1. Разбор схемы (*.xsd) или *.xml (может понадобится и то, и другое) для получения списка полей к заполнению.
2. Создание *.xml файла согдасно схемы и настройки заполнения полей.
xml-лем раньше не занимался.
Начал с прочтения статьи "Чтение XML-файлов с помощью Document Object Model (DOM)." с этого сайта и сразу же наткнулся на то, что XMLRead работает только с кодировкой UTF-8. В моем случае, кодировка 1251, да и мало ли какая еще может понадобится...
Подскажите пож, в каком направлении двигаться? Чего почитать, где посмотреть?
Сейчас сел изучать пример StreamAsXMLDemo, но в коде там написано:
unit Laz_DOM;
{
BEWARE !!!
This is a TEMPORARY file.
As soon as it is moved to the fcl, it will be removed.
}
чего ожидать и куда двигаться, чтобы потом не пришлось переделывать?
1. Разбор схемы (*.xsd) или *.xml (может понадобится и то, и другое) для получения списка полей к заполнению.
2. Создание *.xml файла согдасно схемы и настройки заполнения полей.
xml-лем раньше не занимался.
Начал с прочтения статьи "Чтение XML-файлов с помощью Document Object Model (DOM)." с этого сайта и сразу же наткнулся на то, что XMLRead работает только с кодировкой UTF-8. В моем случае, кодировка 1251, да и мало ли какая еще может понадобится...
Подскажите пож, в каком направлении двигаться? Чего почитать, где посмотреть?
Сейчас сел изучать пример StreamAsXMLDemo, но в коде там написано:
unit Laz_DOM;
{
BEWARE !!!
This is a TEMPORARY file.
As soon as it is moved to the fcl, it will be removed.
}
чего ожидать и куда двигаться, чтобы потом не пришлось переделывать?
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Я поднимал как-то тему по поводу работы с xml-файлами как с деревом, там же лежит ссылка на компонент который портировал
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Иногда играюсь с libxml2, в основном через SAX, через DOM не пробовал.
http://svn.shamangrad.net/mxlib/trunk/xml/libxml2.pas
http://svn.shamangrad.net/mxlib/trunk/xml/libxml2.pas
Padre_Mortius писал(а):Я поднимал как-то тему по поводу работы с xml-файлами как с деревом, там же лежит ссылка на компонент который портировал
Ссылка на исходники уже битая:
Такого файла не существует или он был удален из-за нарушения авторских прав.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
могу на почту отправить или http://depositfiles.com/ru/rmv/1376557974369864
- Сергей Смирнов
- энтузиаст
- Сообщения: 595
- Зарегистрирован: 28.04.2005 13:23:25
- Откуда: Москва
- Контактная информация:
В принципе, можно засосать файл в поток, сконвертить его в UTF8 и передать в парсер (там есть XMLRead для чтения из потока) без строки заголовка. Аналогично и в обратную сторону. Я только не знаю, как там обстоят дела с анализом схемы. Может быть ещё и не реализовано.tria писал(а):Начал с прочтения статьи "Чтение XML-файлов с помощью Document Object Model (DOM)." с этого сайта и сразу же наткнулся на то, что XMLRead работает только с кодировкой UTF-8. В моем случае, кодировка 1251, да и мало ли какая еще может понадобится...
tria писал(а):XMLRead работает только с кодировкой UTF-8. В моем случае, кодировка 1251, да и мало ли какая еще может понадобится...
По-моему, перекодировать не проблема.
Добавлено спустя 15 минут 49 секунд:
Код: Выделить всё
var
f: TFileStream;
st: TStringStream;
s: String;
begin
f := TFileStream.Create('c:\data.xml', fmOpenRead);
st := TStringStream.Create('');
st.CopyFrom(f, f.Size);
f.Free;
s := st.DataString;
st.Free;
s := AnsiToUTF8(s); // s := SysToUTF8(s);
st := TStringStream.Create(s);
ReadXMLFile(doc, st);
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
v-t-l писал(а):По-моему, перекодировать не проблема.
ага, но если в самом XML-файле явно указана кодировка (что вроде как требуется по формату, если кодировка не UTF), то он по идее должен либо кракозябры дать, либо вообще поругаться на символы отсутвтующие в ожидаемом charset... в зависимости от ситуации. Если на то пошло, то видимо прийдется анализировать загловок и менять в нем кодировку...
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
просто сообщит что кодировка не поддерживается)
Padre_Mortius писал(а):просто сообщит что кодировка не поддерживается)
Именно. Лазил отладчиком - проверяет запись в первой строке xml и если она не utf-8 - то дает сообщение о ошибке.
Идея с перекодированием на лету - это конечно, извращение, но сделать можно
Padre_Mortius писал(а):могу на почту отправить
Если можно pavel собач dt.ck.ua
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Спасибо, получил.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Поддержка любых кодировок будет уже скоро, сейчас идет допинывание последних багов.
А примерно, сколько вы их еще пинать будете? (допиНывание)
)
Я так понимаю, данная часть отностися к FPC а не к Лазарю, и в 0.9.26 включено не будет?
Я так понимаю, данная часть отностися к FPC а не к Лазарю, и в 0.9.26 включено не будет?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Скорее всего на след. неделе отправлю патч.
Хотя вот сегодня обнаружили еще один баг с невыровненным доступом к памяти на ARM, его бы хорошо тоже до кучи исправить, но я даже не знаю с какой стороны подступиться (на х86 оно не проявляется).
Это часть FCL, к Лазарю не относящаяся.
Почему-то уже три релиза подряд у меня появляется время сделать что-то существенное сразу же после релиза
Хотя вот сегодня обнаружили еще один баг с невыровненным доступом к памяти на ARM, его бы хорошо тоже до кучи исправить, но я даже не знаю с какой стороны подступиться (на х86 оно не проявляется).
Это часть FCL, к Лазарю не относящаяся.
Почему-то уже три релиза подряд у меня появляется время сделать что-то существенное сразу же после релиза
