За последние 24 часа нас посетили 52405 программистов и 1763 робота. Сейчас ищут 2595 программистов ...

обработка txt -> xml c помощью php

Тема в разделе "PHP для новичков", создана пользователем velocat, 19 янв 2008.

  1. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    Помогите пожалуйста решить следующую задачу:
    создание треков для Gmap (Google API)

    есть файл (plt, т.е текстовый) - т.н. "польский формат для точек
    Код (Text):
    1. OziExplorer Track Point File Version 2.1
    2. WGS 84
    3. Altitude is in Feet
    4. Reserved 3
    5. 0,2,255,ACTIVE LOG                         ,0,0,2,8421376
    6. 11
    7.   55.929530,  37.858260,1,    456,39256.1282639, 23-июн-07, 3:04:42
    8.   55.929640,  37.858500,0,    456,39256.1284028, 23-июн-07, 3:04:54
    9.   55.929620,  37.858630,0,    456,39256.1284491, 23-июн-07, 3:04:58
    10.   55.929080,  37.858870,0,    456,39256.1287269, 23-июн-07, 3:05:22
    11.   55.927260,  37.858140,1,    456,39256.1292477, 23-июн-07, 3:06:07
    12.   55.926380,  37.857920,0,    456,39256.1295023, 23-июн-07, 3:06:29
    13.   55.926290,  37.858310,0,    456,39256.1295833, 23-июн-07, 3:06:36
    14.   55.926350,  37.858590,0,    470,39256.1297801, 23-июн-07, 3:06:53
    15.   55.926780,  37.857770,1,    470,39256.1303819, 23-июн-07, 3:07:45
    16.   55.926420,  37.858970,0,    546,39256.1312731, 23-июн-07, 3:09:02
    17.   55.926440,  37.859140,0,    548,39256.1316319, 23-июн-07, 3:09:33
    в нём первые шесть строк - метаданные, причем шестая - создана автоматически, и означает следующее количество точек. далее идут строки с координатами.

    его надо загрузить на сервер в исходном виде, чтобы он был в таком виде доступен для скачивания.

    После этого его надо обработать в XML для его отображения на сайте и сохранить в таком виде в БД посредством PHP. ( как сохранить я знаю)

    Код (Text):
    1. <?xml version="1.0" encoding="Windows-1251" ?>
    2. <routes>
    3. <route>
    4.   <p lat="55.96306236" lon="38.02902460" markerIcon="images/greenCircle.png" />
    5.   <p lat="55.96271405" lon="38.02908897" />
    6.   <p lat="55.96356679" lon="38.03314447" />
    7.   <p lat="55.96401117" lon="38.03290844" />
    8. .....
    9.   <p lat="55.96447956" lon="38.03432465" />
    10.   <p lat="55.96613691" lon="38.03719997" />
    11.  <p lat="55.84289192" lon="38.19877625" markerIcon="images/redCircle.png" />
    12. </route>
    13. </routes>
    Так вот основная проблема в том что я не могу сообразить как из текстового файла создать массив для того чтобы из него сформировать XML
     
  2. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    Да и ещё вопрос от начинающего, точнее просьба:
    помогите разложить последний код из предыдущего сообщения в массив
    где p[n] ($lat, $lon, $markerIcon) , т.е надо получить значения аттрибутов из каждой строки Р и положить их в массив,
    могу вытащить эти аттрибуты для строк через JS, а нужно в PHP. Понимаю, как разложить строку, но никак не дойду до того, как из строки вытащить атрибуты, т.е. значения
     
  3. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    ну, считывай файл в массив, отбрасывай первые 6 элементов, дальше разбивай строку по пробелам на массив
     
  4. GreatWasp

    GreatWasp Активный пользователь

    С нами с:
    11 янв 2008
    Сообщения:
    94
    Симпатии:
    0
    Адрес:
    Узбекистан, Ташкент.
    Типа того:
    PHP:
    1.  
    2. <?php
    3. $lines=file('ПУТЬ_К_ТВОЕМУ_ФАЙЛУ.РАСШИРЕНИЕ');
    4. foreach ($lines as $key=>$value)
    5. {
    6.      if ($key<=5) continue;
    7.      // тут формируй свой XML
    8. }?>
     
  5. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    Спасибо, попробую.

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

    (код формирует массив из текстового файла $str вытаскивая последовательно значения широты и долготы lat и lon и выводит его в XML)

    PHP:
    1.  
    2. echo '<gpx ...>';
    3. echo '<trk>';
    4. echo '<name>'. rus2lat($name) .'</name>';
    5.  
    6.  
    7. echo '<trkseg>';
    8. $str = '#lat="(.*)"\s+lon="(.*)"#Us';
    9. preg_match_all($str,$contents,$matches);
    10.  
    11.      $lenght = count($matches[1]);
    12.      for ($i = 0; $i < $lenght; $i++)
    13.      {
    14.         $lat = $matches[1][$i];
    15.         $lon = $matches[2][$i];
    16.         echo '<trkpt lat="'. $lat .'"  lon="'. $lon . '">';
    17.         echo '</trkpt>';
    18.      }
    19.  
    20. echo '</trkseg>';
    21. echo '</trk>';
    22. echo '</gpx>';
     
  6. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    Сделал всё как описано.
    Получаю из текста XML строку, в ней заменяю знаки на &lt; &gt; и т.п.
    для того чтобы хранить эту строку в БД.

    Всё ОК, если строка короткая, а если эта строка содержит большое кол-во значений (это точки маршрутов и их может бытьнесколько сотен) , то при размещении как TEXT в БД эти значения "бьются".

    т.е. данные сохраняю в MySQL в виде:
    Код (Text):
    1. .....
    2. &lt;p lat=&quot;55.64076776&quot; lon=&quot;38.63232434&quot; ele=&quot;525.5804&quot;  /&gt;&lt;p lat=&quot;55.64023132&quot; lon=&quot;38.63217413&quot; ele=&quot;528.7343&quot;  /&gt;&lt;p lat=&quot;55.63956613&quot; lon=&quot;38.63215268&quot; ele=&quot;517.6955&quot;  /&gt;&lt;p lat=&quot;55.63879366&quot; lon=&quot;38.63215268&quot; ele=&quot;517.6955&quot;  /&gt;&lt;p lat=&quot;55.63851471&quot; lon=&quot;38.63213122&quot; ele=&quot;516.1183&quot;  /&gt;&lt;p lat=&quot;55.63851471&quot; lon=&quot;38.63215268&quot; ele=&quot;516.1183&quot;  /&gt; .....
    Но в БД постоянно теряется какая нибудь "буква", например вместо &gt; пишется &t; и соответственно при выводе этих данных из таблицы не получается нормально сформировать XML.

    Подскажите, что я не так делаю? думал не хватает поля и изменял TEXT до LONGTEXT но это ничего не меняет.
     
  7. velocat

    velocat Активный пользователь

    С нами с:
    19 янв 2008
    Сообщения:
    32
    Симпатии:
    0
    PS Строку формирую из загруженного файла (см. сообщения выше) так:
    PHP:
    1. $file_url = $GPS_file_dir.$GPS_file_name;
    2.  
    3. if ( ereg("plt$", $GPS_file_name))
    4. {
    5.         $lines = file ($file_url);
    6.        
    7.         $count_lines = count($lines);
    8.  
    9.         $str = '  &lt;route&gt;';  
    10.         for ($i=6; $i <= $count_lines-1; $i++)
    11.         {
    12.            
    13.             list($lat, $lon,, $ele,,,) = split(',', $lines[$i]);
    14.  
    15.             $str .= '&lt;p lat=&quot;'.trim($lat).'&quot; lon=&quot;'. trim($lon).'&quot; ';
    16.             $str .= 'ele=&quot;'. trim($ele).'&quot; ';
    17.  
    18.             $str .= ' /&gt;' ;
    19.            
    20.         }
    21.         $str .= '  &lt;/route&gt;';