класс для работы с XML
На сайте в конференции обсуждался вопрос "Зачем нужен XML".
Классическое мнение - его используют для передачи данных в многоплатформенных приложениях. Это неоспоримо, хотя на мой взгляд очень много избыточности (теги и прочее), особенно передача через интернет.
Встечаются задачи (и очень часто), когда в таблицу необходимо положить очень много полей, и поля эти могут меняться во времени, как количественно, так и качественно. Вот тут XML и выручает. В таблице выделяется MEMO поле под XML код, и хранится в нем любое количество разнообразных полей, причем для каждой записи в таблице, набор полей в XML коде может быть разный. Для работы с таким полем предлагается следующий класс, позволяющий получать XML код из именованного массива и упаковывать данные массива в XML код.
Для распаковки XML используется Microsoft.XMLDom.
Пример
LOCAL oXML oXML = NEWOBJECT('xml_object', 'xml_object.vcx') ***Создание таблицы CREATE CURSOR TestXML (Id I, TextXML M) ***Добавление свойств в объект oXML oXML.Set_property('Text_1', 'Тестовый текст 1') oXML.Set_property('Text_2', 'Тестовый текст 2') oXML.Set_property('Text_3', 'Тестовый текст 3') oXML.Set_property('Integer_1', 123) oXML.Set_property('Integer_2', 456) oXML.Set_property('Integer_3', 789) oXML.Set_property('Numeric_1', 1.23) oXML.Set_property('Numeric_2', 4.56) oXML.Set_property('Numeric_3', 7.89) oXML.Set_property('Logic_1', .T.) oXML.Set_property('Logic_2', .F.) ***Добавление записи в таблицу (идентификатор и MEMO поле с XML данными) APPEND BLANK replace Id WITH 1, TextXML WITH oXML.get_xml() ?TestXML.TextXML ***То что хранится в поле TextXML: *** ***Тестовый текст 1 ***Тестовый текст 2 ***Тестовый текст 3 ***123.00 ***456.00 ***789.00 ***1.23 ***4.56 ***7.89 ***1 ***0 *** ***Очистка объекта oXML (удаление всех ранее добавленных свойств) oXML.RemoveAll() ***Загрузка XML кода в объект oXML oXML.load_xml(TestXML.TextXML) ***Получение данных из объекта oXML ?oXML.get_property('Text_1') ?oXML.get_property('Text_2') ?oXML.get_property('Text_3') ?oXML.get_property('Integer_1') ?oXML.get_property('Integer_2') ?oXML.get_property('Integer_3') ?oXML.get_property('Numeric_1') ?oXML.get_property('Numeric_2') ?oXML.get_property('Numeric_3') ?oXML.get_property('Logic_1') ?oXML.get_property('Logic_2') USE IN TestXML
Вложенные файлы
# |
Название |
Тип файла |
Размер |
---|---|---|---|
1 | 355xml | .zip | 3,93 КБ |