XML.LoadFromString

From SunFlurry wiki
Revision as of 13:29, 16 June 2021 by 1>Admin
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  LoadFromString (Загрузка из строки)
Объект:Объект XML
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку, число, файл не найден, системная ошибка.
Визуальность:Нет

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

Синтаксис

XML.LoadFromString(<Строка с XML (STRING)>):<Ошибки при загрузке строки (STRING)>

Аргументы

  • <Строка с XML (STRING)> - Аргумент задает строку для загрузки.

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

Возвращает список ошибок в виде строки, разделенной знаками переноса строк, либо пустую строку, если ошибки не произошло. Важно: если функция возвратила ошибку, документ не был загружен полностью и не будет иметь структуры (обход по веткам документа будет невозможен).

Примеры

//Данный пример является продолжением примера из XML.LoadFromFile, определяющим кодировку текста до начала проверки структуры

var aUTF16 Export;
//Проверка начала файла без BOM в формате UTF-16
aUTF16:="<"+chr(0)+"?"+chr(0)+"x"+chr(0)+"m"+chr(0)+"l";

  Function _ПроверитьКорректностьXMLВПапке(аПуть)
    Form.StatusText("Подсчитывается "+аПуть+"...");
    aList:=File.LoadFileNames(аПуть+"*.*");
    For i:=1 To aList.Size() Do
      аФайл:=aList.GetName(i);
      If File.IsDirectory(аПуть+аФайл) Then
        //Исключаем ссылки на другие папки (к примеру "Application Data" ссылается на себя же и т.п.)
        If File.GetFileAttributes(аПуть+аФайл) And _FILE_ATTRIBUTE_REPARSE_POINT=0 Then
          _ПроверитьКорректностьXMLВПапке(AddBackslash(аПуть+аФайл));
        EndIf;
      Else
        If Uppercase(GetExt(аФайл))="XML" Then
          //Найдем тип кодировки файла
          Стр:=FileToString(аПуть+аФайл,-1);
          If Left(Стр,2)=Chr(255,1)+Chr(254,1) Then //BOM UTF-16
            Стр:=TranslateFrom(Стр,1200);
          ElseIf Left(Стр,3)=Chr(239,1)+Chr(187,1)+Chr(191,1) Then //BOM UTF-8
            Стр:=TranslateFrom(Стр,65001);
          ElseIf pos("<?xml",Стр)=1 Then
            Стр1:=Стр;
            Стр1:=Uppercase(TearStr(Стр1,"?>"));
            TearStr(Стр1,"ENCODING=");
            If pos("UTF-8",Стр1)>0 Then
              Стр:=TranslateFrom(Стр,65001);
            ElseIf pos("WINDOWS-",Стр1)>0 Then
              TearStr(Стр1,"WINDOWS-");
              Стр1:=Number(Стр1);
              If Стр1>0 Then
                Стр:=TranslateFrom(Стр,Стр1);
              EndIf;
            EndIf;
          ElseIf pos(aUTF16,Стр)=1 Then
            Стр:=TranslateFrom(Стр,1200);
          EndIf;

          аОб:=XML.Create();
          Стр:=аОб.LoadFromString(Стр);
          If not IsEmpty(Стр) Then
            Message("Ошибки при проверке файла "+(аПуть+аФайл)+":"+_NEWLINE+Стр,"!");
          EndIf;
        EndIf;
      EndIf;
    EndDo;
  EndFunction

аПуть:="C:\";
_ПроверитьКорректностьXMLВПапке(аПуть);