Juri Shutenko Personal Homepage. Visual FoxPro.

XML. Часть 5. Функция XMLTOCURSOR() (новая редакция).

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

Синтаксис функции приведен ниже:

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

Параметры:

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

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

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

Если вы не укажите путь, Visual FoxPro ищет XML-файл по каталогу Visual FoxPro.

cCursorName
 
Указывает имя курсора, в котором будет сохранен результат и который будет создан в текущей рабочей области.
 

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

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

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

nFlagsОписание
0 (по умолчанию) Рассматривает первый параметр, как строку, содержащую XML данные.
4 Сохраняет пробелы в данных и не принимает во внимание аттрибута xml:space в XML данных.
512 Определяет, что первый параметр, будь это eExpression или cXMLFile, как строку, содержащую имя и путь к файлу с XML данными.
1024 NOCPTRANS – Создает в результирующем курсоре поля типов Character и Memo с опцией NOCPTRANS и вставляет текст или XML значения в поля типов Character или Memo не транслируя их, но основку "байт за байтом".
 
При использовании с флагом 1024, XMLTOCURSOR( ) возвращает строку, дополненную хвостовыми пробелами, числом равным реальной длине строки, вследствие чего используется строка двойной длины.
2048 Используется, когда импортируемая XML схема имеет в (XSD) схеме определение, содержащее десятичный тип данных с ограничением, или фасеты totalDigits="19" и fractionDigits="4."
 
Такие значения XSD типов данных размечаются в тип данных Currency в результирующем курсоре Visual FoxPro.
4096 Запрещает base64-декодирование.
 
В Visual FoxPro, base64-декодирование включено для декодирования только бинарных данных.
8192 Указывает, что cCursorName представляет собой имя или псевдоимя (alias) существующей таблицы или курсора и импортирует данные из указанного XML файла в существующую таблицу или заранее созданный курсор.
 
Если курсор/таблица с именем cCursorName уже содержат данные, то импортируемые из XML файла данные добавляются к существующим. Если cCursorName представляет собой пустую строку (""), данные из XML файла импортируются в таблицу или курсор, открытые в текущей рабочей области.
 
Установка nFlags в значение 8192 может быть полезной, когда XML схема недоступна или не подходит для использования.
32768 Указывает, что должна быть использована кодовая страница.
65536 Размечает поля Char XML к "родным полям" Varchar Visual FoxPro. Если флаг не указан, то этот тип данных XML размечается к типу данных Character Visual FoxPro.
131072 Размечает поля XML base64Binary к "родным полям" Varbinary Visual FoxPro, если длина данных меньше 255 байт, или к полям Blob, если длина данных больше этого значения. Если этот флаг не указан, поля XML base64Binary размечаются к полям Memo Visual FoxPro.

При использовании флага 8192, отдавайте себе отчет в следующем:

  • Вы должны убедиться, что схема таблица соответствует дополняемым данным, получаемым из XML элементов в соответствующей манере. Visual FoxPro навязывает типы данных cCursorName как описано в таблице Data Type Matching table в этой статье, но не делает прочих допущений о типах данных. Попытка импортировать несовместимые значения будет генерировать соответствующее сообщение.
  • Если XML содержит схему или ссылается на нее, а типы данных в схему конфликтуют с типами данных таблицы или курсора, то будут использоваться типы данных таблицы или курсора, но не типы данных XML.
  • Имена элементов в файле XML размечаются в имена колонок в cCursorName. Дополнительно, Visual FoxPro импортирует только данные из имен элементов в файле XML, которые соответствуют именам колонок в существующем курсоре или таблице, определяемыми значением cCusorName.
  • Курсор или таблица могут иметь больше колонок, чем элементы, описанные в XML файле, но они должны имет по крайней мере одно соответстветствие с именем колонки. Курсор или таблица могут иметь дополнительные колонки, которые не имеют соответствия с элементами в файле XML.
  • Если таблица содержит поля типа autoincrement, XMLTOCURSOR( ) вызовет сбой, если AUTOINCERROR установлен в ON. Установка AUTOINCERROR в OFF или выключение автоувеличения в целевой таблице с помощью функции CURSORSETPROP( ) позволяют XMLTOCURSOR( ) исполнить конверсию. Поле или поля типа autoincrement в целевой таблице получат автоувеличение в соответствии с указанными величинвми, в значения в исходных данных не будут скопированы.

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

Типы данных VFPПоведение
Character, Character (Binary), Memo, Memo (Binary) Акцептирует любые данные, но обрезает их по длине, если она превышает размер колонки Character.
Currency Акцептирует численные данные внутри допустимого диапазона, определяемого знаяениями типа данных Currency, но обрезает числа, выходящие за границы этого диапазона.
Date Акцептирует форматы date и dateTime XML значений.
 
Visual FoxPro преобразует форматы XML в соответствующие форматы дат и времени Visual FoxPro. Visual FoxPro сохраняет только M/D/Y порцию значений XML date или dateTime.
DateTime Акцептирует формат date и dateTime XML данных.
 
Visual FoxPro преобразует XML date и dateTime форматы в соответствующие Visual FoxPro date и сбрасывает точность, не поддерживаемую Visual FoxPro.
Double Акцептирует численные данные внутри указанного дропустимого диапазона типов Double, но обрезает числа, выходящие за пределы этого диапазона.
Integer Акцептирует целочисленные данные внутри допустимого диапазона полей типа Integer, но обрезает числа, выходящие за пределы этого диапазона.
Logical Акцептирует значения True, .T., 1, False, .F., и 0.
Numeric, Float Акцептирует численные данные с или без десятичной частью, но обрезает числа, выходяшие за пределы допустимого диапазона для этих типоа в соответствии с правиласми Visual FoxPro или замещает численное переполнение индикатором переполнения ("*************").

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

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

Примечания
 
Вы можете использовать XMLTOCURSOR( ) с OLE DB Provider для Visual FoxPro. Однако, свойство VFPXMLProgID системной переменной _VFP не поддердживается, так как системная переменная _VFP не поддерживается в OLE DB Provider.
 
Замечание
 
Для использования Visual FoxPro OLE DB Provider совместно с функцией XMLTOCURSOR( ), вы должны иметь инсталлированным MSXML 3.0 на компьютре с OLE DB Provider.
 
XMLTOCURSOR( ) генерирует синтаксическую ошибку для записей длиной более чем примерно 160 колонок. Точное число колонок, которое может вызвать ошибку зависит от длины имен колонок.
 
XMLTOCURSOR( ) не использует тип данных Varchar при создании курсора из XML документа. Однако, XMLTOCURSOR( ) поддерживает добавление данных в курсор, содержаший поля этого типа.
 
При вызове XMLTOCURSOR( ) в режиме добавления записей, Visual FoxPro добавляет пустую строку, если ни один из элементов XML документа не имеет соответствий колонкам в таблице или курсоре.
 
XMLTOCURSOR( ) преобразует тип данных Decimal в 20,19 (width, precision). В версиях до Visual FoxPro 8.0, Decimal размечались в Numeric 8,0.
 
Условия численного переполнения
 
XMLTOCURSOR( ) импортирует XML данные, содержащие условия численного переполнения Visual FoxPro, например, "*******", вместо численного или целочисленного значения. Если XML данные сопровождает схема, Visual FoxPro создает корректный тип данны в результирующем курсоре, но заменяет символы asterisk (*) значениями 0.0 или 0. Поэтому, XML парсер, используемый функцией XMLTOCURSOR( ) не посылает ошибку, если символьные значения ("*******") хранятся в элементах десятичного типа.


Cелектор для быстрого перехода на сайты, связанные с Visual FoxPro.