Приведение xml файла к удобочитаемому виду на RSL
Сохранить в файлеОбсудить в форуме
Описание
Иногда 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; // Окончание заполнения массива