Преобразует Visual FoxPro курсор в XML.

CURSORTOXML(nWorkArea | cTableAlias, cOutput [, nOutputFormat 
[, nFlags [, nRecords [, cSchemaName [, cSchemaLocation [, cNameSpace ]]]]]])

Параметры

nWorkArea

Указывает рабочую область таблицы, из которой создается XML строка.

Если вы укажите 0 или не укажите ничего, Visual FoxPro использует текущую рабочую область.

cTableAlias

Указывает псевдоимя (alias) таблицы, из которой создается XML строка.

cOutput

Указывает путь и имя файла или переменную памяти, в которые будет послан результат преобразования.

Если nFlags установлен в 0 (по умолчанию), то результат преобразования - XML строка - будет послан в переменную памяти. Если переменная памяти не существует к этому моменту, то она будет создана.

Если nFlags установлен в 512 для посылки результата преобразования в файл, а файл еще не существует, то он будет создан. Если же файл уже существует, то его содержимое будет переписано. При этом учитывается установка, определенная SET SAFETY.

nOutputFormat

Определяет формат вывода XML строки. В приведенной ниже таблице перечислены значения для nOutputFormat.

nOuputFormat Описание

1 – ELEMENTS

(По умолчанию) XML на базе элементов

2 – ATTRIBUTES

XML на базе аттрибутов

3 – RAW

Общий, XML на базе аттрибутов

nFlags

Определяет форматирование, произведенного в результате преобразования, XML и его назначение. В приведенной ниже таблице перечислены значения для nFlags.

nFlags Bit Описание вывода

0

0000

(По умолчанию) Производит XML в формате UTF-8.

Эта установка создает переменную памяти, если она указана в cOutput, но не существует и посылает в нее сформированный XML.

XML декларация в этом случае не содержит аттрибута кодировки Encoding=; то есть, аттрибут кодировки не устанавливается в UTF-8.

1

0001

Производит неформатированный XML в виде длинной строки.

2

0010

Для пустых элементов вставляет открывающий и закрывающий тэги, например, <cc04><cc04/>.

4

0100

Сохраняет пустые пространства (пробелы, в том числе и хвостовые) в полях.

8

1000

Разрешает деление мемо полей на строки в секциях CDATA.

16

10000

Кодировка вывода. Вывод кодируется по кодовой странице курсора.

Для гарании аккуратной трансляции символов, кодовая страница Visual FoxPro, используемая по умолчанию должна соответствовать кодовой странице курсора. Вы можете обеспечить это поведение установкой для символьных и мемо полей аттрибута NOCPTRAN ( character binary/memo binary).

При использовании этого значения с таблицами, использующими любые кодовые страницы, аттрибут кодировки в XML устанавливается в пустую строку (""). Для изменения кодировки в корректный аттрибут используйте функцию STRTRAN().

Например, для кодовой страницы с номером 936, выполните приведенное ниже для готовой XML строки:

  CopyCode image Скопировать код
strxml=STRTRAN(strxml, 'encoding=""', 'encoding="gb2312"'

32

100000

Кодировка вывода.

512

1000000000

Результат преобразования посылается в файл, указанный в параметре cOutput.

Если файл еще не существует, то он будет создан. Если файл уже существует, то его содержимое будет переписано новым. Принимается во внимание установка, определенная SET SAFETY.

4096

1000000000000

Запрещает кодирование base64.

CURSORTOXML( ) экспортирует поля Memo (Binary) как xsd:base64binary, если вы не используете значение флага nFlags равное 4096. В Visual FoxPro, кодировка base64 является средством до кодирования только бинарных данных.

32768

none

Указывает, что должна быть использована кодовая страница.

В приведенной ниже таблице описывается, как записывается аттрибут кодировки, когда кодировка вывода устанавливается по умолчанию в кодовую страницу курсора или таблицы.

ЗамечаниеЗамечание

Флаги кодировки устанавливаются комбинацией битов 4 и 5 (0010000).

Флаг кодировки Биты 4 и 5 Описание

+0

00

(По умолчанию) Windows-1252.

+16

01

Устанавливает аттрибут кодировки вывода в кодовую страницу курсора.

+32

10

Устанавливает аттрибут кодировки вывода в UTF-8 без символьной трансляции.

+48

11

Устанавливает аттрибут кодировки вывода в UTF-8 и транслирует символьные данные в UTF-8.

В приведенной ниже таблице перечислены Windows-совместимые общие кодовые страницы.

Кодовая страница Платформа Аттрибут кодировки в XML-декларации Комментарии

437

MS-DOS, US

ibm437

 

850

MS-DOS, International

ibm850

 

865

MS-DOS, Nordic

Пустная строка ("")

866

MS-DOS, Russian

cp866

 

932

Windows, Japanese

shift-jis

 

936

Simplified Chinese

gb2312

 

949

Windows, Korean

iso-2022-kr

или:

ks_c_5601-1987

950

Windows, Traditional Chinese (Taiwan)

big5

 

1250

Windows, East European

Windows-1250

Учитывайте регистр.

1251

Windows, Russian

Windows-1251

 

1252

Windows, U.S., West European

Windows-1252

 

1253

Windows, Greek

Windows-1253

 

1254

Windows, Turkish

Windows-1254

 

1255

Windows, Hebrew

Windows-1255

 

1256

Windows, Arabic

Windows-1256

 

ЗамечаниеЗамечание

Visual FoxPro использует кодировку Windows-1252 в качестве кодировки по умолчанию. Вы можете указать, что аттрибут кодировки будет установлен в соответствие с кодовой страницей, такой как Big5 (кодовая страница 950), при использовании наборов двухбайтных символов (DBCS) для языков DBCS, для которых Visual FoxPro поддерживает кодовые страницы.

При использовании Windows-1252 и DBCS не требуется дополнительной трансляции символов для корректного отображения в Internet Explorer.

Однако, для того, чтобы сделать XML более отвечающий Web браузерам, которые могут интерпретировать UTF-8, вы можете дополнительно установить аттрибут кодировки в UTF-8 вместо Windows-1252. Результат преобразования будет подвергнут трансляции в UTF-8 только тогда, когда вы установите nFlags в значение 48 (указав аттрибут кодировки, как UTF-8, и произведя трансляцию символов в формат UTF-8). Это требуется только тогда, когда данные действительно содержат двухбайтные символы. У вам нет необходимости использовать трансляцию символов, STRCONV ( ), например, для случая, когда вы выводите в XML только символы латинского алфавита.

nRecords

Указывает число записей, преобразуемых в XML и по умолчанию имеет значение, равное 0.

Если nRecords равно нулю, то преобразованию подлежат все записи таблицы или курсора. Если же nRecords указан большим, чем число записей, имеющихся в таблце, то только имеющиеся записи и будут посланы в вывод.

cSchemaName

Указывает имя и местонахождение схемы информации о данных в cOutput, например "MySchema.xsd". Если вы не указали расширения для файла внешней схемы, то создается файл с расширением .xsd.

В приведенной ниже таблице перечислены значения для cSchemaName.

cSchemaName Описание

cSchemaName

Указывает имя и путь внешнего файла для схемы (относящейся к области корневого элемента XML).

ЗамечаниеЗамечание

Если cSchemaName содержит имя файла, а cSchemaLocation не предоставлена или является пустой, содержимое cSchemaName записывается в аттрибут xsi:schemaLocation или xsi:noNamespaceSchemaLocation в XML документе.

В приведенном ниже примере, Visual FoxPro генерирует XML файл общего вида с именем MyXMLFile.xml из файла Labels.dbf под псевдоменем "Labels" и файл схемы с названием MySchema, помещаемым в один и тот же каталог.

  CopyCode image Скопировать код
CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, "mySchema.xsd")

Если cSchemaName включает в себя URI, то схема записывает в текущий каталог и должна быть перегружена на сервер, который должен быть доступен браузеру или парсеру. Внешняя схема всегда записывается в то же место, что и файл XML.

"1"

Определяет, что будет произведена внутренняя (вложенная) схема. Например, приведенный ниже пример производит внутренюю схему:

  CopyCode imageСкопировать код
CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, "1")

""

Определяет, что в результате преобразования не будет сгенерирована схема.

cSchemaLocation

Определяет необязательное местонахождение, в котором приложение, читающее данные из XML, должно искать файл схемы.

ЗамечаниеЗамечание

Используйте этот параметр только в случае, когда вы развертываете вашу схему в месте, отличающемся от места, в котором расположены данные XML.

Содержание cSchemaLocation записывается в аттрибут xsi:schemaLocation или xsi:noNamespaceSchemaLocation, произведенного в результате преобразования, XML. Параметр cschemaLocation может представлять адрес HTTP или другой URI. Вам необходимо скопировать файл схемы в место, которое вы указали в cSchemaLocation.

В приведенное ниже примере прозводится преобразование в XML данные:

  CopyCode imageСкопировать код
CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, ;
   "mySchema.xsd", "http://www.microsoft.com/mySchema.xsd")

содержащие приведенный ниже аттрибут:

  CopyCode imageСкопировать код
   xsi:noNamespaceSchemaLocation=" http://www.microsoft.com/mySchema.xsd"

Передача значения параметру cSchemaLocation в случае, когда cSchemaName незаполнено, вызовет запись этого же аттрибута в XML данные. Это дает вам возможность указать существующую схему без ее регенерации каждой раз, когда вызывается функция CURSORTOXML( ).

cNamespace

Указывает пространство имен XML или производимой схемы и по умолчанию устанавливается в пустую строку ("").

Указание значения для cNameSpace устанавливает аттрибут targetNamespace в это же значение и добавляет в схему аттрибут elementFormDefault="qualified".

Если вы не указали значения для cNamespace а схема является внешней, то декларация пространства имен не записывается в схему. Если вы не указали cNamespace, а схема является вложенной, то аттрибут targetNamespace схемы устанавливается в пустую строку ("").

Expand imageВозвращаемое значение

Численный тип данных. CURSORTOXML( ) возвращает число байт, записанных в файл или посланных в переменную памяти.

Expand imageПримечания

Вы можете использовать CURSORTOXML( ) с OLE DB Provider для Visual FoxPro. Однако, свойство VFPXMLProgID системной переменной _VFP не поддерживается, так как системная переменная _VFP не поддерживается в OLE DB Provider.

ЗамечаниеЗамечание

Для использования Visual FoxPro OLE DB Provider с функцией CURSORTOXML( ), вы должны инсталлировать MSXML 3.0 на компьютер, на котором имеется OLE DB Provider.

Вывод, производимый CURSORTOXML( ) придерживается индексного упорядочивания курсора, SET FIELDS TO и текущей установки фильтрации. Однако, он не сохраняет местоположения указателя записи курсора. После вызова CURSORTOXML( ), если в вывод были посланы все записи, указатель записи курсора показывает на EOF. Если был произведен вывод не всех записей, то указатель записи указывает на последнюю запись, которая была направлена в XML.

Конечный XML, полученный с помощью CURSORTOXML( ) содержит те же самые размерности, что и экспортируемая таблица, если таблица содержит значения типов данных Double. Например, если колонка Double создана с размерностью 6, использование приведенного ниже кода приведет к тому, что в конечный XML будет содержать шесть цифр, справа от десятичной точки:

  CopyCode imageСкопировать код
CREATE TABLE test (col1 b(6))

Когда вы используете функцию CURSORTOXML( ) для экспорта таблицы или курсора в XML, корневой узел всегда содержит "VFPData", независимо от формата вывода.

Только для типов Date, вы можете экспортировать "EMPTY" для типов Date и DateTime при использовании CURSORTOXML( ). Однако, проверка схемы XML на действительность может провалиться, так как "EMPTY" не является действительным значением для этих типов в определении XML схемы (XSD). Это единственная проблема для случая, если требуется схема, а конечный XML проверяется XML парсером, который может интерпретировать схемы XSD. Для того, чтобы избежать подобного, вам может потребоваться изменить данные в их непустые представления, с помощью вызова подходящего предложения SELECT и использовать CURSORTOXML( ) на созданном таким образом курсоре. Например, вы можете изменить пустые значения Date или DateTime на .NULL.:

  CopyCode imageСкопировать код
SELECT orderid, EVL(shippeddate,.NULL.) as ShippedDate FROM orders

Вы можете , кроме того, изменить пустые значения Date или DateTime подходящими для "empty" представлениями :

  CopyCode image Скопировать код
SELECT orderid, IIF(EMPTY(shippeddate),{^1899-12-30 00:00:00},tc11); 
   as ShippedDate FROM orders

При использовании флага 32768, установки флагов 16 и 32 могут оказать влияние на применяемую кодовую страницу, в зависимости от типа данных, которые записываются в XML. В приведенной ниже таблицк показаны возможные комбинации установок и применяемые для каждой установки кодовые страницы.

Для XML документа, записанного с установленным флагом 32768, применяются приведенные ниже кодовые страницы.

Флаг 16

Флаг 32

Флаг 32768 установлен

Не установлен

Не установлен

XML документ: Window-1252.

Данные в Unicode: code page 1252.

Character data: default code page, unless a field is marked as NOCPTRANS.

True (.T)

Не установлен

XML документ: Plus-CodePage свойство курсора. Если свойство CodePage объекта XMLField CodePage больше чем ноль (0) и он не не содержит кодовую страницу курсора, сообщается об ошибке.

Данные в Unicode: свойство Code page объекта курсора.

Символьные данные: нет. Вместо этого используются текущие данные таблиц Visual FoxPro (.dbf).

Не установлен

Установлен

XML документ: UTF-8 code page.

Данные в Unicode: UTF-8 code page.

Символьные данные: Кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS, в противном случае не производится дополнительной трансляции в UTF-8.

Установлен

Установлен

XML документ: UTF-8 code page.

Данные в Unicode: UTF-8 code page.

Символьные данные: Кодовая страница по умолчанию, если поле не маркировано как  NOCPTRANS, в противном случае производится дополнительная трансляция в UTF-8 с использование значения установки SYS(3005).

Для XML документа, записанного без установки флага 32768, применяются перечисленные ниже кодовые страницы.

Флаг 16

Флаг 32

Без флага 32768

Не установлен

Не установлен

XML документ: Window-1252.

Данные в Unicode: code page 1252.

Символьные данные: кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS.

True (.T)

Не установлен

XML документ: Свойство CodePage курсора.

Символьные данные: нет. Вместо этого используются текущие данные таблиц Visual FoxPro (.dbf).

Данные в Unicode: Свойство кодовой страницы объекта курсор.

Не установлен

Установлен

XML документ: UTF-8 code page.

Данные в Unicode: UTF-8 code page.

Символьные данные: кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS, в противном случае не производится дополнительной трансляции в UTF-8.

Установлен

Установлен

XML документ: UTF-8 code page.

Unicode data: UTF-8 code page.

Character data: dкодовая страница по умолчанию, если поле не маркировано как NOCPTRANS, в противном случае, они транслируются в UTF-8 с использованием кодовой страницы для текущей установки SYS(3005).

Expand imageСмотри также