Обсуждение:Приведение xml файла к удобочитаемому виду

0 (0)
  • Развернуть Обсуждение:Приведение xml файла к удобочитаемому виду ( Обсуждение примера  19.09.2017 05:07 )
    3(2)
    Приведение xml файла к удобочитаемому виду (добавление отступов, переводов строк).
    Запуск в командной строке, в качестве параметра имя файла (и можно необходимое число пробелов отступа). Входной файл не изменяется, а создается новый с добавкой расширения OUT.
    Посмотреть пример
    >> Ответить
    • Развернуть на перл ( KaMPiLeR  17.10.2017 10:47 )
      5(1)
      для ответов по 550п делаю так:
      while($s=<>)
        {
         chomp($s);
         $s=~s/\<UV/\n\<UV/g;
         $s=~s/\<TU_OKATO/\n\<TU_OKATO/g;
      
         $s=~s/(\<\/[A-Za-z_]+>)/$1\n/g;
         
         $s=~s/encoding=\"utf-8\"/encoding=\"windows-1251\"/g;
         
         
      
         print(utf2win($s));
        }
      
      
      sub utf2win{my($s)=@_; 
              return''if(!defined$s)||''eq$s; 
              my($r,$l)=('',length$s); 
              my@uM=(0x80,0xE0,0xF0,0xF8,0xFC,0xFE); 
              my@us=(0x00,0xC0,0xE0,0xF0,0xF8,0xFC); 
              my@um=(0x7F,0x1F,0x0F,0x07,0x03,0x01); 
      doo: for(my$i=0;$i<$l;){ 
                      my($c,$n,$d)=(ord(substr($s,$i++,1)),-1); 
                      for(my$j=0;$j<6;$j++){ 
                              $n=$j,$c&=$um[$j],last if($c&$uM[$j])==$us[$j]} 
                      $r.='?',next if$n<0; 
                      for(my$j=0;$j<$n;$j++){ 
                              $r.='?',next doo if$i>=$l||((($d=ord(substr($s,$i,1)))&0xC0)!=0x80); 
                              $i++;$c<<=6;$c|=($d&0x3F)} 
                      $r.='?',next if$c>0xFFFD||($c>=0xD800&&$c<=0xDFFF); 
                      if($c>1039&&$c<1104){$c=chr($c-1040+192) 
                      }elsif($c==1025){$c=chr(168) 
                      }elsif($c==1105){$c=chr(184) 
                      }elsif($c==13||$c==10||($c>31&&$c<256)){$c=chr($c); 
                      }else{$c='?'} 
                      $r.=$c} 
              $r}
      

      вызывать:
      perl xml2p550.pl file.xml > file.xml.txt
      >> Ответить