Приведение xml файла к удобочитаемому виду на RSL

Автор:R-Style Softlab
Дата:12.11.2020
Просмотров:1486
Скачиваний:464
Оценка:, Оценок - 4
Сохранить в файле

Обсудить в форуме

Описание

Иногда xml файлы без форматирования нужно привести к удобочитаемому виду. Добавить отступы, переносы строк.

Текст примера

 // файл читает XML в одну строку, а создает XML многострочный

var _FileName:string = "..\\mac\\1.xml";         // входной файл
var _FileNameNew:string = "..\\mac\\1test_neew.xml"; // имя файла, которое будет создано

var filemass = tarray;
var arr = tarray;
var Lspace = 0;

FILE Old () txt;
if( NOT Open(Old, _FileName) ) MsgBox("OLD file is not open!"); exit(1); end;

file new () txt key 9999 write;
if ( not open(new, _FileNameNew) )   msgbox ("NEW file is not open!");   exit(1); end;


private macro spacer (num)
        var numC = "";
        while (num > 0)
        numC = numC + "  ";
        num = num - 1;
        end;
        return numC;
end;

 macro GetBlocks(str:string) : bool
    var i = 1;
    var stBlockPos = i;    //начало блока

    while(i < strlen(str))         //бьем на блоки

      if(SubStr(str, i, 2) == "><")
        arr[arr.size] = SubStr(str, stBlockPos, i-stBlockPos+1);


          if (index(arr[arr.size-1], "</") == 1)
              Lspace = Lspace-2 ; // Пробелы вставим уже после вставки, для следующей строки
          end;

        arr[arr.size-1] = string(spacer(Lspace)) + arr[arr.size-1];

        if ( NOT Insert(new ,arr[arr.size-1]) )
            msgbox("Ошибка вставки "+arr[arr.size-1]);
        end;

          if (index(arr[arr.size-1], "/") == 0)
              Lspace = Lspace+2 ; // Пробелы вставим уже после вставки, для следующей строки
          end;



        stBlockPos = i + 1;
      end;
      i = i + 1;
    end;

    arr[arr.size] = SubStr(str, stBlockPos);

        if ( NOT Insert(new ,arr[arr.size-1]) )
            msgbox("Ошибка вставки "+arr[arr.size-1]);
        end;

    return true;

  end;



// Заполним массив данными из текстового файла
while( Next(Old) )
filemass[filemass.size] = Old.Str; // Забираем данные из файла XML построчно
println("строка "+filemass.size +". длина "+strlen(filemass[filemass.size-1]) );

 GetBlocks (filemass[filemass.size-1]); // Делим и выводим
end;
// Окончание заполнения массива