Загрузка XML в очередь

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7371
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Загрузка XML в очередь

Сообщение Игорь Столяров »

Привет всем !

В штатном классе Clarion есть метод для загрузки данных в очередь из XML файла:

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

  If FromXMLFile(QueueXML,FileNameXML,'RootTag','RowTag',,DOMStyle:ADO_26) ...  
Подскажите пожалуйста, а есть аналогичный метод для загрузки в очередь из строки с XML ?
Описания нет, в исходниках как-то всё запутанно. Может кто-нибудь уже сталкивался ...

Заранее спасибо ! :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
SergioRaguzini
Старожил
Сообщения: 236
Зарегистрирован: 08 Декабрь 2009, 19:16
Откуда: Краснодарский край
Благодарил (а): 6 раз

Загрузка XML в очередь

Сообщение SergioRaguzini »

Приветствую!
CapeSoft xFiles - там такое есть (вроде где то был на FTP)
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Загрузка XML в очередь

Сообщение Губин Игорь »

AnyScreen:XMLToQueue
Transforms a properly formatted XML structure to a Clarion QUEUE.
Prototype
AnyScreen:XMLToQueue PROCEDURE
(STRING pString, *QUEUE pQueue),BYTE
Parameters
pString
A properly formatted XML structure (return value from the AnyScreen:QueueToXML function)
pQueue
Name of a GROUP structure which you wish to populate.
Return value: BYTE
Returns 0 if the input string is not properly formatted.
Returns 2 if there is a record in the XML which does not match any QUEUE variable by name.
Returns 1 if there is no error.
Example
In the following example we use the AnyScreen:GroupToXML and AnyScreen:XMLToGroup functions to move
data between Server and Client.
Suppose that you want to populate a Browse Queue with a list of client-side printers.
To do so, you would need to modify the NetClient.app (see AnyScreen:ExecuteClientSource). In the appropriate
section of the NetClient.app you could use the following code:
IF Var1='GetPrinterQ'THEN
! Write your own code here to get a list of client printers, put them in a Queue, e.g. PrintersQ
RETURN AnyScreen:QueueToXML(PrintersQ) !This will pass the printer queue back to the server-side app
END
In your application you could use the following code:
ClientPrintersQ QUEUE
PrinterQXML CSTRING(255)
 
CODE
IF AnyScreen:Active THEN
PrinterQXML = AnyScreen:ExecuteClientSource('GetPrinterQ')
END !IF
 
AnyScreen:XMLToQueue(PrinterQXML, ClientPrintersQ)
The ClientPrintersQ should now contain a list of Client-side printers.
See also
AnyScreen:GroupToXML
AnyScreen:XMLToGroup
AnyScreen:QueueToXML
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7371
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Загрузка XML в очередь

Сообщение Игорь Столяров »

SergioRaguzini писал(а): 18 Март 2022, 9:51 CapeSoft xFiles - там такое есть (вроде где то был на FTP)
Спасибо - да, знаю.
Здесь как раз таки хотелось бы упростить код, а не наоборот. :)

Сейчас строку XML приходится записывать в файл для загрузки в очередь.
Более чем уверен, что штатный класс XML умеет это делать одной командой ... надо просто разобраться как. :)
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 2329
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Поблагодарили: 18 раз

Загрузка XML в очередь

Сообщение Губин Игорь »

В стандартном всё просто. Достаточно дописать функцию в класс (файлы cpxml).
Берётся стандартный FromXMLFile, переименовывается и в нём заменяется вызов XMLFiletoDOM на XMLStringtoDOM
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7371
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Загрузка XML в очередь

Сообщение Игорь Столяров »

Губин Игорь писал(а): 18 Март 2022, 10:24 переименовывается и в нём заменяется вызов XMLFiletoDOM на XMLStringtoDOM
Спасибо. Это интересно и в правильном направлении ... Буду смотреть :)
В принципе, распарсить строку не сложно в цикле, как учил Юрий ... :(
Тут просто хочется сделать без наворотов.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7371
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Загрузка XML в очередь

Сообщение Игорь Столяров »

Губин Игорь писал(а): 18 Март 2022, 10:24 Берётся стандартный FromXMLFile
Ещё раз спасибо, всё прекрасно получилось.
Хотя, конечно, я удивлён, что нет такого метода в XML классе.
У меня получился вот так:

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

FromXMLString PROCEDURE(*queue que, *string StrXML , string root, string label) !,byte
XMLDoc  &Document,Auto
xRValue Byte(False)
  Code
  XMLDoc &= XMLStringToDOM(StrXML)
  If ~(XMLDoc &= NULL)
     xRValue = DOMToQueue(XMLDoc,que,root,label)
     XMLDoc.release()
  end
  Return xRValue
И кстати ! У этого метода нет проблем с русской кодировкой в C63, в отличии от FromXMLFile ... ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить