On-line: Andrey, гостей 1. Всего: 2 [подробнее..]
АвторСообщение





Пост N: 674
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 27.08.21 19:27. Заголовок: Формирование XML


Добрый день

Почему-то уверен, что "где-то" есть простая и удобная функция формирования xml файла из, допустим, хэша. Ооочень не хочу изобретать велосипед. Поиск по hb_Xml вывел на парсер, а мне нужно наоборот.

Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 6 [только новые]


постоянный участник




Пост N: 3848
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.21 20:17. Заголовок: Sergy пишет Ооочень ..


Sergy пишет
 цитата:
Ооочень не хочу изобретать велосипед.


У меня вышло так
- храню xml шаблон для клиентов, как базу, прописан с мах возможной структурой, где в тэгах стоят типа макросы\ключи из ini или hash, т.е. "<...>-^001</...>"+CRLF ... // - означает, что тэг не обязательный
- читаю такой шаблон и из (ini\hash) источника заменяю ключи ^001 на данные, если есть, если нет и есть -, то тэг на выход не идет, если тэг обязательный, а ключа нет, убираю его, в смысле ключ, получая <...></...>
- замену можно делать как StrTran на строку шаблона, либо построчно hb_Atokens(cBuf, CRLF). Где удобнее так и делаю
PS. xml шаблоны храню, как текстовые файлы в подкаталоге, имя, как правило, мнемоника понятная, если смотреть на оглавление. Это сделано, что бы редактором можно было поправить шаблон не привлекая меня. Редактор запускается из программы с таблицы "Список xml для ...", т.е. есть наименование для клиента и соответствующая мнемоника, под которой лежит файл xml (это скорее для меня, если лезу Far-ом)

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 675
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 27.08.21 21:59. Заголовок: Идея интересная, нуж..


Идея интересная, нужно будет подумать...
В общем, мне нужно научить мою систему электронному документообороту через СБИС. Нужно имеющиеся документы (заголовки и содержимое УПД отгрузки) выгружать в виде XML в заданный каталог. Пока думаю собрать данные в хэш и из него уже формировать xml, например:
 
{ "НаимКонтр" => "ООО Ромашка",
"ИннКонтр" => "1234567890",
"НомерДок" => "123",;
"Содержимое" => {
"Строка1" => { "Наим" => "Печенье Чебурашка", "Кол"=>"2", "Цена"="134.65", "Налог" => "23.12" },
"Строка2" => { "Наим" => "Печенье Полет", "Кол"=>"3", "Цена"="434.65", "Налог" => "73.12" },
}
"СуммаДок" => "4567.89",
"ФиоДир" => "Иванов П.А.",
...
}
Если есть функция конвертации из хэша в xml, то отпадет смысл читать и разбирать XML по тегам, создавать и анализировать имена шаблонов-переменных. Кроме того, исключит ошибки в написании шаблонов.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3849
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.08.21 22:34. Заголовок: Sergy пишет Кроме то..


Sergy пишет
 цитата:
Кроме того, исключит ошибки в написании шаблонов.


Это очень оптимистическое отношение к процессу. Не знаю что такое система СБИС, у нас тут своя. Суть
есть производитель и сети магазинов с системой xml заказов, в магазин отправляется xml исполнения заказов + система возвратных xml ордеров с товаром от магазина производителю. Магазины - это сети "Rimi", "Maxima", "Prizma" (правда ее выжили с рынка) и т.д. Магазины по разным городам и везде стоит типа "одна" система, но выдаваемые ею xml ключами могут оличаться, т.е для xml ордеров-заказа (прием), пришлось делать таблицу перекодироаки <тэг xml> => поле базы. Для отдаваемых xml в магазины пришлось построить описанную схему выше, т.к. даже в одной сети у разных магазинов, система принимает по разному тэги, там он обязателен, как пустой в др. месте на пустой ругается, что должен отсутствовать такой тэг, я уже молчу, что названия тэгов в отправляемых тэгах для магазинов одной сети могут быть разные. Единственное, что понял - это человеческий фактор (кто ставил\ настраивал) или разные версии программы, т.е. тут сменили. а тут нет, типа не добрались.
PS. Составлять шаблоны оказалось просто, т.к. от каждого магазина есть описание xml - это pdf или excel файл. Беру и тупо ВСЕ данные тэгов просто нумерую, формируя ключ ^001, ^002, ... Немного надо повозиться, что бы выявить из др. таблицы файла описания, что есть обязательный или нет тэг и добавить в шаблон "-" перед ^, но не смотря на это, основное - это , как проглотит полученный xml их программа, если не проглотит, то даст сообщение и правим тогда свой шаблон
PS2. Вот один из первых вариантов xml шаблона, без ini\hash ключей, где сразу из базы по макро берутся данные, сейчас создаю ini файл секцию с ключами
^100 = выражение
^101 = ...
...
вместо макро из указанного шаблона. Для процедуры реализации указываю цикл тэг для исполнения DO WHILE !EOF()
Пример шаблона, цикличный тэг <Line> ... </Line>Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3850
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.08.21 09:39. Заголовок: Sergy пишет отпадет ..


Sergy пишет
 цитата:
отпадет смысл читать и разбирать XML по тегам


Для получения представленного Hash, надо иметь какой то источник (hash или ini файл), где будет соответствие ключа (имя тэга) и выражение получение значения для этого ключа. И чем это отличается от шаблона, т.е.
 

{ "НаимКонтр" => "ООО Ромашка",
"ИннКонтр" => "1234567890",
"НомерДок" => "123",;
"Содержимое" => {
"Строка1" => { "Наим" => "Печенье Чебурашка", "Кол"=>"2", "Цена"="134.65", "Налог" => "23.12" },
"Строка2" => { "Наим" => "Печенье Полет", "Кол"=>"3", "Цена"="434.65", "Налог" => "73.12" },
}
"СуммаДок" => "4567.89",
"ФиоДир" => "Иванов П.А.",
...
}
просит наличия чего то такого, например в ini
[BODY]
While = Содержимое // ключ цикла и описание строк самого цикла где то и как то
...
[VALUES]
НаимКонтр = ООО "Ромашка" // или имя поля откуда взять
ИннКонтр = 1234567890
...
СуммаДок = 4567.89
...

Со временем эти ключи могут меняться, не держать же их в prg, можно применить тут использование hrb и накапливать как библиотеку для формирования xml. Это будут hrb iшаблоны.

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 676
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 28.08.21 12:53. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для получения представленного Hash, надо иметь какой то источник (hash или ini файл), где будет соответствие ключа (имя тэга) и выражение получение значения для этого ключа. И чем это отличается от шаблона, т.е.


Хм, логично… Пошел думать

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 677
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 09.09.21 18:08. Заголовок: Сергей, возник вопро..


Сергей, возник вопрос: вот есть накладная, которую нужно передать в виде xml. Есть некий набор обязательных и необязательных полей, задаваемых шаблоном. Это понятно. А как ты задаешь в шаблоне итерацию по строкам с товаром, ведь их количество заранее неизвестно ?

Вижу у тебя тэг <Line>. Получается, что ты еще анализируешь и содержимое тэгов ? И где-то жестко заложено, что <Line> обрабатывать в цикле, а остальные - пропускать без изменения в выходной файл, подставляя лишь значения между тэгами ?

А если <Line> завтра окажется в каком-то из новых шаблонов контрагента как рабочий тэг ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 252
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет