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

XMLTOCURSOR(eExpression | cXMLFile [, cCursorName [, nFlags ]])

Параметры

eExpression

Определяет XML текст или выражение, которое оценивается в действительные XML данные. Параметр eExpression может представлять собой переменную памяти Visual FoxPro, содержание мемо поля, возврат из HTTP запроса, результат, возвращенный из вызова метода SOAP, XML из XMLDOM поток ADO.

NoteЗамечание

XMLTOCURSOR() сгенерирует ошибку, если eExpression не найдено или если eExpression не разбирается в действительный XML.

cXMLFile

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

Если вы не указали для файла путь, Visual FoxPro будет искать XML файл внутри каталогов Visual FoxPro.

cCursorName

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

Если курсор с указанным именем уже существует или открыт, Visual FoxPro закрывает курсор и создает его заново в неиспользуемой рабочей области. Если вы опустите параметр cCursorName или пошлете для него пустую строку (""), Visual FoxPro создаст курсор с именем "XMLRESULT" для возврата результата разбора XML файла или выражения.

Если cCursorName содержит данные, а параметр nFlags установлен в значение 8192, Visual FoxPro добавить импортируемые из XML файла данные в существующий курсор или таблицу. Для этого случая таблица или курсор должны быть открыты или использоваться. Если cCursorName представляет собой пустую строку (""), Visual FoxPro импортирует XML в таблицу или курсор, которые открыты в текущей рабочей области.

nFlags

Определяет как будет обрабатываться XMLSource eExpression функцией XMLTOCURSOR( ). В приведенной ниже таблице описаны значения для параметра nFlags.

 
nFlags Бит Описание

0

0000

(По умолчанию) Рассматривает первый параметр, как строку, содержащую XML данные.

4

0100

Сохраняет "белые" пространства в данных и переписывает аттрибут xml:space XML данных.

512

01000000000

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

1024

10000000000

NOCPTRANS – Создает в результирующей курсоре поля Character и Memo с опцией NOCPTRANS и вставляет текст или XML значения, содержащиеся в исходных элементах в поля Character или Memo без осуществления трансляции кодовых страниц, на основе "байт за байтом".

При использовании флага 1024, XMLTOCURSOR( ) возвращает строку с хвостовыми пробелами, которые равны по длине реальной строке, то есть строку удвоенной длины.

2048

100000000000

Используется в случае, когда импортируемая схема представляет собой схему "XML schema definition" (XSD), содержащую ограничения, или фасеты, totalDigits="19" и fractionDigits="4".

В этом случае, значения типов данных XSD, имеющих такие фасеты, размечаются в тип данных Visual FoxPro Currency в результирующем курсоре.

4096

1000000000000   

Запрещает перекодировку по базе base64.

В Visual FoxPro, кодировка base64 внедрена только для кодировки бинарных данных.

8192

1100000000

Определяет, что параметр cCursorName представляет собой имя или псевдоимя (alias) существующей таблицы или курсора, что приведет импорт данных из указанного источника XML данных в существующую таблицу или заранее определенный курсор.

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

Установка флага nFlags в значение 8192 может быть полезна в случае, когда схема XML недоступна или не может быть использована.

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

32768

0x8000

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

65536

0x10000

Размечает поля Char XML в родные поля Varchar Visual FoxPro. Если это значение не установлено во флаге, поля XML Char размечаются в поля Character Visual FoxPro.

131072

0x20000

Размечает поля XML base64Binary в родные поля Fox Varbinary, если их длина меньше, чем 255 байт или, в противном случае, в поля Blob. Если это значение не установлено во флаге, поля XML base64Binary размечаются в Memo поля Visual FoxPro.

При использовании флага 8192 имейте ввиду приведенное ниже:

  • Вы должны убедиться, что схема таблицы отвечает исходным элементам XML соответствующим образом. Visual FoxPro "навязывает" тип данных, существующих в cCursorName так как это описано в приведенной ниже таблице соответствия типов данных но не делает допущений о типах данных. Попытка импортировать несовместимые данные приведет к генерации соответствующего сообщения.

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

  • Имена элементов в XML файле размечаются в имена колонок в cCursorName. В дополнение к этому, Visual FoxPro импортирует данные только из тех элементов, имена которых соответствуют именам колонок курсора, указанного в cCusorName.

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

  • Если таблица содержит поля с автоувеличением, функция XMLTOCURSOR() не сработает в случае, если AUTOINCERROR установлен в ON. Установка AUTOINCERROR в OFF или отключение автоувеличения в целевой таблице с помощью функции CURSORSETPROP( ) позволит выполнение функции XMLTOCURSOR( ). Поле или поля с автоувеличением целевой таблицы увеличивают свои значения в соответствии с определенным при их создании значением, и эти значения в исходной таблице не копируются.

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

 
Тип данных Visual FoxPro Поведение

Character, Character (Binary), Memo, Memo (Binary)

Акцептирует любые данные, но обрезает любые данные в случае, если их длина превышает длину колонки с типом Character.

Currency

Акцептирует численные данные внутри акцептируемого диапазона для данных типаCurrency но обрезает числа, выходящие за пределы акцептируемого диапазона.

Date

Акцептирует формат даты XML и значения dateTime.

Visual FoxPro конвертирует форматы даты XML и dateTime в соответствующие форматы даты Visual FoxPro. Visual FoxPro сохраняет из значений XML даты или dateTime только порцию даты, то есть Месяц/День/Год.

DateTime

Акцептирует формат даты XML и значения dateTime.

Visual FoxPro конвертирует форматы даты XML и dateTime в соответствующие форматы даты Visual FoxPro и сбрасывает точность данных (миллисекунды), выходящие за пределы поддерживаемого Visual FoxPro формата.

Double

Акцептирует численные данные внутри акцептируемого диапазона данных типа Double, но обрезает числа, выходящие за пределы этого диапазона.

Integer

Акцептирует целочисленные данные внутри акцептируемого диапазона данных типа Integer, но обрезает числа, выходящие за пределы этого диапазона.

Logical

Акцептирует значения True, .T., 1, False, .F. и 0.

Numeric, Float

Акцептирует численные данные с десятичными знаками или без них, но обрезает числа выходящие за пределы акцептируемого диапазона для этих типов в соответствии с правилами Visual FoxPro или замещает их индикатором переполнения ("*************").

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

Численный тип данных. XMLTOCURSOR( ) возвращает число созданных записей.

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

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

NoteЗамечание

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

XMLTOCURSOR() генерирует ошибку синтаксиа для записей с длиной большей, чем приблизительно 160 колонок. Точное число колонок, которое может вызвать такую ошибку зависит от длины имен колонок.

XMLTOCURSOR( ) does not use the Varchar type when creating a cursor from an XML document. However, XMLTOCURSOR( ) supports appending data into an existing cursor with Varchar fields.

При вызове функции XMLTOCURSOR( ) в режиме добавления записей, Visual FoxPro добавляет пустую строку, если имена элементов XML не соответствует любым именам таблицы или курсора.

XMLTOCURSOR( ) конвертирует тип данных Decimal в тип данных Numeric 20,19 (длина, точность). В версиях до Visual FoxPro 8.0, тип данных Decimal размечался в тип данных Numeric 8,0.

Условия численного переполнения   XMLTOCURSOR( ) импортирует XML данные, содержащие условия численного переполнения Visual FoxPro, например, "*******", вместо численных (numeric) или целочисленных (integer) значений. Если совместно с XML файлов предоставляется схема, то Visual FoxPro создает корректные типы данных в результирующем наборе, но заменяет переполнение с символом asterisk (*) в значения 0.0 или 0. Поэтому XML парсер, используемый функцией XMLTOCURSOR( ) не вызывает ощибки вследствие того, что символьные значения хранятся в элементе с типом данных decimal.

Для получения более подробной информации о конвертировании XML в данные Visual FoxPro смотрите описание Преобразование между данными XML и Visual FoxPro.

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

Справочное руководство

Функция CURSORTOXML()
Функция XMLUPDATEGRAM( )

Концепции

XML данные в Visual FoxPro

Прочие ресурсы

Функции

Статьи русского FoxClub'a

Использование XML в Visual FoxPro