Импорт и экспорт данных в формате 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.    Для завершения работы приложения выберите из меню Файл команд}'Выход.