Импорт и экспорт данных в формате XML
Мы уже несколько раз говорили о легкости импорта и экспорта данных в формате XML при помощи средств Visual FoxPro 9. Как практически реализоватьобмен данными? Рассмотрим один из возможных путей. В Visual FoxPro 9 присутствуют следующие полезные функции для конвертирования данных таблиц вформат XML и обратно: CURSORTOXML (), XMLTOCURSOR () и XMLUPDATEGRAM (). Естьодин нюанс при работе с этими функциями - для их успешной работы необходимо, чтобы в вашей системе был установлен MSXML 3.0 или выше. Если у вас установлен Internet Explorer 5.5 или выше, MSXML у вас точно есть. Познакомимся скаждой из функций в отдельности. Следующая функция экспортирует данныетаблицы в формат XML.
> <Рабочая_область> I <Имя_таблицы> - указывается рабочая область илиимя таблицы, данные которой будут помещены в XML-файл;
> <Путь_для_результата> - определяет путь к XML-файлу и имя XML-файла или имя символьной переменной, куда будет выведен результат преобразования;
> <Формат_результата> - задает формат вывода данных. Возможные варианты:
1 - элементы (поля таблицы станут элементами в формате XML);
2 - атрибуты (поля таблицы станут атрибутами в формате XML);
3 - ориентированный на строки формат (поля таблицы станут атрибута¬
ми в формате XML);
> <Флаги> - определяет особенности трансформации данных и форматирования выходного результата. Возможные значения приведены втабл. 4.1;
> <Выводимые_записи> - задает количество выводимых записей исходнойтаблицы. Если задать 0, то будут выведены все записи таблицы;
> <Имя_схемы> - указывается имя используемой схемы XML. Если вы желаете включить схему в XML-файл, укажите в качестве этого параметра ? 1 ?;
> <Местоположение_схемы> - определяет при использовании внешнегофайла схемы дополнительный путь, где нужно искать файл со схемой;
> <Пространство_имен> - задает пространство имен XML.
Например:
Рассмотрим следующую функцию из нашего списка, обратную предыдущей.Она импортирует данные в формате XML в таблицу.
Если вы задали имя выходного XML-файла, а он не создается, проверьте, указали ли вы флаг, например, 512.
> <Выражение> ! <ХМЬ-файл> - задает либо переменную, содержащую данные в формате XML, либо имя файла с данными в формате XML;
> <Курсор> - определяет имя курсора, в который помещается результат.Если ку рсор уже существует, он закроется и будет создан новый. Если указано имя существующей открытой таблицы и установлен флаг 8192, данные из XML-файла будут добавлены в таблицу;
> <Флаг> - указывает дополнительные параметры преобразования xml-дан-ных. Возможные варианты флагов приведены в табл. 4.2.
Если XML-данные не «well-formed», Visual FoxPro 9 выдает ошибку, подобнуюприведенной на рис. 4.45.
Например:
И последняя функция нашего списка - XMLUPDATEGRAM{). Она служит дляотражения операций изменения в таблице или курсоре. В XML-файле сохраняется состояние записи или ключевого поля до внесения изменений и после. Дваглавных условия для применения этой функции - использование режима SETMULTILOCKS ON и включенная буферизация таблицы, например, посредствомкоманды CURSORSETPROP ("Buffering" , 5). Формат функции:
> <Список_таблиц> - список контролируемых таблиц;
> <Флаги> - аналогично используемым в функции CURSORTOXML (), исключаяфлаги 512 и 4096;
> <Имя_схемы> - указывается, если используется XML Schema Definition(XSD).
Пример файла, созданного при помощи XMLUPDATEGRAM ():
Соответственно, в секции updg:before содержатся данные до внесения изменений, а в секции updg: after - после внесения изменений. Что называется,«найдите десять отличий». А отличие в нашем случае одно: изменено отчествов поле Name.
Попробуем на практике
Создавая меню для нашего приложения, мы предполагали снабдитьпользователя возможностью импорта данных из XML-формата и экспортаданных в XML-формат. Для этой цели мы заготовили пункты меню Файл >Работа с XML > Экспорт в XML и Файл > Работа с XML > Импорт вXML. Взяв на вооружение только что рассмотренные функции, попробуем
реализовать обещанные пользователю возможности. Для этого выполнитеследующие действия:
1. В папке с нашим проектом InStaff создайте две папки - IN и OUT. Мыбудем использовать их так: в папку IN будет помещаться XML-файл, данные из которого будут импортироваться, а в папке OUT будет создаваться XML-файл после экспорта данных.
2. Смените текущую папку, выполнив в окне Command команду
CD ?
Откроется окно, в котором нужно найти созданную нами ранее папкуInStaff.
3. Если окно проекта не открыто, выберите команду Open (Открыть) изменю File (Файл). В появившемся окне открытия файла выберите файлпроекта, который мы создали ранее.
4. Щелкните мышью по папке Programs (Программы), находящейся в папке Code (Программный код), а затем по кнопке New (Новый). Появитсяокно для ввода тела программы.
5. Введите в окне следующие команды:
6. Сохраните программу (File > Save) в папке PRG под именем alvexpxml.
7. Закройте окно с программой.
8. В окне проекта щелкните мышью по папке Programs (Программы), находящейся в папке Code (Программный код), а затем по кнопке New (Новый). Появится окно для ввода тела программы.
9. Введите в окне следующие команды:
10. Сохраните программу (File > Save) в папке PRG под именем alvimpxml.
11. Закройте окно с программой.
12. В результате в окне проекта в папке Programs (Программы) кроме основной программы main должны появиться еще две программы (рис. 4.46).
13. Вызов программ на выполнение в основном меню нашего приложенияуже реализован.
14. В окне проекта (см. рис. 4.46) щелкните мышью по имени основной программы main. Она расположена в папке Programs (Программы).
15. Щелкните по кнопке Run (Выполнить) в окне проекта.
16. Появится окно для ввода имени пользователя и пароля. Введите имяпользователя - Admin и пароль - Password.
17. После заполнения полей щелкните по кнопке ОК. Появилась строка менюнашего приложения.
18. В основном меню приложения выберите пункт Файл, в появившемся подменю выберите пункт Работа с XML, а затем команду Экспорт в XML.Если вы не забыли создать папку OUT и ввели текст программ правильно,появится сообщение, представленное на рис. 4.47.
19. Убедитесь, что в папке OUT действительно возник файл PersExp.xml.Просмотрите его в любом текстовом редакторе. Сравните записанные внего данные с информацией в таблице Persons.
20. В основном меню приложения выберите пункт Файл, в появившемсяподменю выберите пункт Работа с XML, а затем команду Импорт изXML. Появится сообщение, представленное на рис. 4.48.
21. Сообщение совершенно справедливо указывает на отсутствие xml-файла сдобавляемыми данными. Файл мы действительно еще не создали. В окнесообщения щелкните мышью по кнопке ОК.
22. В любом текстовом редакторе (например, в Блокноте) создайте в папке IN(созданной вами ранее в папке проекта InStaff) файл с именем PersImp xmlследующего содержания:
23. В основном меню приложения выберите пункт Файл, л появившемся подменю выберите пункт Работа с XML, а затем команду Импорт из XML.
24. Если вы правильно ввели содержимое xml-файла, появится сообщение обуспешном завершении импорта. Щелкните мышью по кнопке ОК в этомсообщении и просмотрите данные о сотрудниках. Эго можно сделать ипосредством команды Просмотр персонально (Файл > Сотрудники >Просмотр персонально) и команды Просмотр списком (Файл > Сотрудники > Просмотр списком).
25. Для завершения работы приложения выберите из меню Файл команд}'Выход.