Преобразует 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 строки:
Скопировать код
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, помещаемым в один и тот же каталог.
Скопировать код
CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, "mySchema.xsd")
Если cSchemaName включает в себя URI, то схема записывает в текущий каталог и должна быть перегружена на сервер, который должен быть доступен браузеру или парсеру. Внешняя схема всегда записывается в то же место, что и файл XML.
"1"
Определяет, что будет произведена внутренняя (вложенная) схема. Например, приведенный ниже пример производит внутренюю схему:
Скопировать код
CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, "1")
""
Определяет, что в результате преобразования не будет сгенерирована схема.
- cSchemaLocation
-
Определяет необязательное местонахождение, в котором приложение, читающее данные из XML, должно искать файл схемы.
Замечание
Используйте этот параметр только в случае, когда вы развертываете вашу схему в месте, отличающемся от места, в котором расположены данные XML.
Содержание cSchemaLocation записывается в аттрибут xsi:schemaLocation или xsi:noNamespaceSchemaLocation, произведенного в результате преобразования, XML. Параметр cschemaLocation может представлять адрес HTTP или другой URI. Вам необходимо скопировать файл схемы в место, которое вы указали в cSchemaLocation.
В приведенное ниже примере прозводится преобразование в XML данные:
Скопировать код
CURSORTOXML("LABELS", "myXMLFile.xml", 1, 512, 0, ; "mySchema.xsd", "http://www.microsoft.com/mySchema.xsd")
содержащие приведенный ниже аттрибут:
Скопировать код
xsi:noNamespaceSchemaLocation=" http://www.microsoft.com/mySchema.xsd"
Передача значения параметру cSchemaLocation в случае, когда cSchemaName незаполнено, вызовет запись этого же аттрибута в XML данные. Это дает вам возможность указать существующую схему без ее регенерации каждой раз, когда вызывается функция CURSORTOXML( ).
- cNamespace
-
Указывает пространство имен XML или производимой схемы и по умолчанию устанавливается в пустую строку ("").
Указание значения для cNameSpace устанавливает аттрибут targetNamespace в это же значение и добавляет в схему аттрибут elementFormDefault="qualified".
Если вы не указали значения для cNamespace а схема является внешней, то декларация пространства имен не записывается в схему. Если вы не указали cNamespace, а схема является вложенной, то аттрибут targetNamespace схемы устанавливается в пустую строку ("").
Возвращаемое значение
Численный тип данных. CURSORTOXML( ) возвращает число байт, записанных в файл или посланных в переменную памяти.
Примечания
Вы можете использовать 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 будет содержать шесть цифр, справа от десятичной точки:
![]() | |
---|---|
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.:
![]() | |
---|---|
SELECT orderid, EVL(shippeddate,.NULL.) as ShippedDate FROM orders |
Вы можете , кроме того, изменить пустые значения Date или DateTime подходящими для "empty" представлениями :
![]() | |
---|---|
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). |
Смотри также
Справочное руководство
Функция XMLUPDATEGRAM()Функция XMLTOCURSOR( )
Концепции
Преобразования между XML и данными Visual FoxProXML данные в Visual FoxPro