За последние 24 часа нас посетили 55587 программистов и 1727 роботов. Сейчас ищут 832 программиста ...

Парсер PHP

Тема в разделе "PHP и базы данных", создана пользователем samara, 12 май 2015.

  1. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    Вот такая беда, прошу не ругаться и ничем не кидать.... С прочтения документации пробовал, не особо получается 50/50 на рус/eng
    Подтолкните куда копать, хочу сдернуть все данные и занести в MYSQL, каждый тег в свою колонку таблицы.
    Код (Text):
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <TaskArchive xmlns:xsi="http://www.ru.org/" xmlns:xsd="http://www.ru.org/" version="1.0" xmlns="http://go.ru/">
    3.   <Description>
    4.     <UserName>Иванов И.И.</UserName>
    5.     <Division>НИШТЯК</Division>
    6.     <ExportDate>2015-04-30T11:34:21.0224791+04:00</ExportDate>
    7.   </Description>
    8.   <Data><Task xmlns="http://ya.ru/"><ShortTask UniqueId="3d77b5c3-3ca2-99b9-aee6-cffa3d4be267"><Activity Title="МРТТ" /><CategoryType>Order</CategoryType><Object Title="99д" Caption="99" /><TaskNumber>5875</TaskNumber><TaskYear>2015</TaskYear><TaskDate>2015-04-27</TaskDate><BeginDate>2015-04-30</BeginDate><BlankNumber>579531598</BlankNumber><ActivityPlace Title="КАКАЯТО ЕРУНДА, BVVB" /><ActivityPhone>4654564321456</ActivityPhone><CriminalCase Title="ААА" Caption="КК" /><CriminalCaseNumber>05-999/14</CriminalCaseNumber><CriminalCaseName>75627562</CriminalCaseName><JoinOpu>0</JoinOpu><Division Title="МАМБА" Caption="99EFD99D-5E99-9999-BB99-3B02D03E9B99" /><TaskType>1</TaskType><IMEI>9999999999</IMEI><PrivacyLevel Title="Низкий" Caption="3" /><State>WithoutTaskMission</State></ShortTask><PhysAddress UniqueId="dfddae9d-9b99-4c0d-99ce-9999e9999999"><Town Title="-" Caption="-" /></PhysAddress><Physical UniqueId="999e99ae-9999f-999f-a999-99d9939a9991f"><LastName Title="НЕ УСТАНОВЛЕН" Caption="НЕ " /></Physical><TaskInitiator><Subdivision Title="ИИИ ОООО" Caption="ЙЙ" /><Agency Title="БЛАБЛАБЛАБЛА" /><FullName Title="ИВАНОВ И.И." /><PhoneA>54154132415</PhoneA><PhoneB>4354646; 64646546</PhoneB></TaskInitiator><Orientation><CriminalDirection Title="ЕЩЕ ЧТОТО" /><OrientationDescription>ВОТ ТАК ВОТ
    9. </OrientationDescription></Orientation><Target><Target>КАКОЕТО НАЗВАНИЕ</Target></Target><Sanction><JuridicalOrder>99</JuridicalOrder><Period>180</Period><SanctionDate>2015-04-27</SanctionDate><IsFromConnectionMoment>0</IsFromConnectionMoment><SanctionPerson><Agency>ТРАМПАМПАМ</Agency><Post>ИВАН</Post><FullName>ИВАНОВИЧ</FullName></SanctionPerson></Sanction><AgencyDirectionAlt><CaptionTo>ТРАТАТАТА</CaptionTo><CaptionFor>ИВАНЧЕНКО</CaptionFor></AgencyDirectionAlt><TaskEffectiveness><EffectivenessSign>0</EffectivenessSign><JudgeLegalize>0</JudgeLegalize></TaskEffectiveness><CriminalClauses><CriminalClause><ParagraphNumber Title="956" Caption="ВОВОВ" /><SubparagraphNumber>2</SubparagraphNumber></CriminalClause></CriminalClauses></Task></Data>
    10. </TaskArchive>
    Вывод всего файла получается так:
    Код (Text):
    1.  
    2. <?php
    3. //Файл test.xml содержит XML-документ с корневым элементом
    4. //и, по крайней мере, элемент /[root]/title.
    5.  
    6. if (file_exists('test.xml')) {
    7.     $xml = simplexml_load_file("test.xml");
    8.  
    9.     print_r($xml);
    10. } else {
    11.     exit('Не удалось открыть файл test.xml.');
    12. }
    13. ?>
    а как вывести каждое значение?
    Пытался так не выходит:
    Код (Text):
    1. $TaskArchive = new SimpleXMLElement($xmlstr);
    2. echo $TaskArchive->Description[0]->UserName;
     
  2. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Что? Зачем вы создаёте новый объект?
    Код (Text):
    1. $xml = simplexml_load_file("test.xml");
    этой строчкой вы интерпретировали файл в объект. Всё, вот он, родимый. А дальше работаете уже с ним.
    print_r вам покажет структуру объекта. И дальше вперёд
    $xml->что_то->ещё_что_то
     
  3. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    Друг Можешь показать на 1 обьекте, любом, с 10 устра бьюсь ну никак...
    Вставлять вместо
    Код (Text):
    1. print_r($xml);
    правильно понял?
     
  4. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Покажи вывод print_r($xml);
     
  5. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    Код (Text):
    1. $xml->TaskArchive->Description->UserName;
    Пробовал тоже нет, руки прям опускаются =''''

    print_r($xml);
    Код (Text):
    1. SimpleXMLElement Object ( [@attributes] => Array ( [version] => 1.0 ) [Description] => SimpleXMLElement Object ( [UserName] => Иванов И.И. [Division] => НИШТЯК [ExportDate] => 2015-04-30T11:34:21.0224791+04:00 ) [Data] => SimpleXMLElement Object ( [Task] => SimpleXMLElement Object ( [ShortTask] => SimpleXMLElement Object ( [@attributes] => Array ( [UniqueId] => 3d77b5c3-3ca2-99b9-aee6-cffa3d4be267 ) [Activity] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => МРТТ ) ) [CategoryType] => Order [Object] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => 99д [Caption] => 99 ) ) [TaskNumber] => 5875 [TaskYear] => 2015 [TaskDate] => 2015-04-27 [BeginDate] => 2015-04-30 [BlankNumber] => 579531598 [ActivityPlace] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => КАКАЯТО ЕРУНДА, BVVB ) ) [ActivityPhone] => 4654564321456 [CriminalCase] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => ААА [Caption] => КК ) ) [CriminalCaseNumber] => 05-999/14 [CriminalCaseName] => 75627562 [JoinOpu] => 0 [Division] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => МАМБА [Caption] => 99EFD99D-5E99-9999-BB99-3B02D03E9B99 ) ) [TaskType] => 1 [IMEI] => 9999999999 [PrivacyLevel] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => Низкий [Caption] => 3 ) ) [State] => WithoutTaskMission ) [PhysAddress] => SimpleXMLElement Object ( [@attributes] => Array ( [UniqueId] => dfddae9d-9b99-4c0d-99ce-9999e9999999 ) [0] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => - [Caption] => - ) ) ) [Physical] => SimpleXMLElement Object ( [@attributes] => Array ( [UniqueId] => 999e99ae-9999f-999f-a999-99d9939a9991f ) [0] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => НЕ УСТАНОВЛЕН [Caption] => НЕ ) ) ) [TaskInitiator] => SimpleXMLElement Object ( [Subdivision] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => ИИИ ОООО [Caption] => ЙЙ ) ) [Agency] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => БЛАБЛАБЛАБЛА ) ) [FullName] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => ИВАНОВ И.И. ) ) [PhoneA] => 54154132415 [PhoneB] => 4354646; 64646546 ) [Orientation] => SimpleXMLElement Object ( [CriminalDirection] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => ЕЩЕ ЧТОТО ) ) [OrientationDescription] => ВОТ ТАК ВОТ ) [Target] => SimpleXMLElement Object ( [Target] => КАКОЕТО НАЗВАНИЕ ) [Sanction] => SimpleXMLElement Object ( [JuridicalOrder] => 99 [Period] => 180 [SanctionDate] => 2015-04-27 [IsFromConnectionMoment] => 0 [SanctionPerson] => SimpleXMLElement Object ( [Agency] => ТРАМПАМПАМ [Post] => ИВАН [FullName] => ИВАНОВИЧ ) ) [AgencyDirectionAlt] => SimpleXMLElement Object ( [CaptionTo] => ТРАТАТАТА [CaptionFor] => ИВАНЧЕНКО ) [TaskEffectiveness] => SimpleXMLElement Object ( [EffectivenessSign] => 0 [JudgeLegalize] => 0 ) [CriminalClauses] => SimpleXMLElement Object ( [CriminalClause] => SimpleXMLElement Object ( [ParagraphNumber] => SimpleXMLElement Object ( [@attributes] => Array ( [Title] => 956 [Caption] => ВОВОВ ) ) [SubparagraphNumber] => 2 ) ) ) ) )
    2 мин, пойду покурю, не могу уже.....
     
  6. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    $xml->Description->UserName;
     
  7. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    пустая страница

    код:
    Код (Text):
    1.  
    2. <?php
    3. //Файл test.xml содержит XML-документ с корневым элементом
    4. //и, по крайней мере, элемент /[root]/title.
    5.  
    6. if (file_exists('2576.xml')) {
    7.     $xml = simplexml_load_file("2576.xml");
    8.  
    9. $xml->Description->UserName;
    10.  
    11. } else {
    12.     exit('Не удалось открыть файл 2576.xml.');
    13. }
    14. ?>
     
  8. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    конечно пустая.
    echo $xml->Description->UserName;
     
  9. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    ООО, друг, спасибо огромное!!!!!!
    Конечно уже нагло, но попробую =) как в MYSQL подгрузить теперь?
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  11. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    А как выводить такие значения?
    Код (Text):
    1. <Activity Title="МРТТ"/>
     
  12. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Также. Вот, элемент [Title] => МРТТ,
    теперь только найти к этому тайтлу путь для обращения.
    А в бд почитайте mysqli(). Создаёте соединение с базой, затем создаёте запрос INSERT в таблицу.
     
  13. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    Код (Text):
    1. echo $xml->Data->Task->ShortTask->Activity ["Title"] ;
    Правильный ход мысли? вроде бы выводит все ок, спасибо "за_наводку" )

    Добавлено спустя 54 минуты 49 секунд:
    Так вот, еще раз хочу поблагодарить Вас за помощь в создании парсера!

    Теперь преступаю к insert-y:
    Код (Text):
    1. <?php
    2. $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
    3. if (!$link) {
    4.     die('Ошибка соединения: ' . mysql_error());
    5. }
    6. mysql_select_db('mydb');
    7.  
    8. mysql_query("INSERT INTO mytable (1,2,3,4,5,6,7,8.................) values ('1,2,3,4,5,6,7,8.................')");
    9. ?>
    Как правильно забрать значения из echo? толкнете меня?
     
  14. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  15. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    Вам друг тоже огромное спасибо =) разобрался =)
    Как воспользоваться кнопкой отправки, чтобы не прописывать файлик в ручную а выбирать и наживать загрузить?!
    нашел такой код
    Код (Text):
    1. <input type="file"/>
    как сослаться на парсер, и что нужно в нем добавить или изменить?
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  17. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Пока мне некогда отвечать, но про одну вещь сразу скажу:
    вы меня недочитали. Вы используете mysql, а же говорил про mysqli, разные вещи. Если уж и учиться - сразу выбирать правильное.
    mysql устарел и более поддерживаться не будет. Кроме того, может быть в дальнейшем вообще выпелен из php. Не поленитесь, переделайте.
     
  18. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    Ок, переделываю =)
     
  19. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    ну пока переделываете - намекну.
    допустим, поле в бд 1 - это UserName, а 2 - тайтл, тогда так:
    Код (PHP):
    1. $userName = $xml->Description->UserName;
    2. $activityTitle = $xml->Data->Task->ShortTask->Activity["Title"];
    3. mysql_query("INSERT INTO mytable (userName,activityTitle,3,4,5,6,7,8.................) values ('$userName,$activityTitle,3,4,5,6,7,8.................')");
    Добавлено спустя 1 минуту 26 секунд:
    ну это через mysql_query, на мускулИ сами переделаете, я думаю.
     
  20. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0

    С этим разобрался, стуктуру базы создал, заливается идеально в базу, сейчас с кнопкой мучаюсь:
    Код (Text):
    1.  
    2. <!-- Тип кодирования данных, enctype, ДОЛЖЕН БЫТЬ указан ИМЕННО так -->
    3. <form enctype="multipart/form-data" action="pars.php" method="POST">
    4.     <!-- Поле MAX_FILE_SIZE должно быть указано до поля загрузки файла -->
    5.     <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    6.     <!-- Название элемента input определяет имя в массиве $_FILES -->
    7.     Выберите файл: <input name="userfile" type="file" />
    8.     <input type="submit" value="Загрузить в базу" />
    9. </form>
    ну и соответственно pars.php
    Грубо говоря :
    Код (Text):
    1. <?php
    2. //Файл test.xml содержит XML-документ с корневым элементом
    3. //и, по крайней мере, элемент /[root]/title.
    4.  
    5. if (file_exists('test.xml')) {
    6.     $xml = simplexml_load_file("test.xml");
    7.  
    8.     print_r($xml);
    9. } else {
    10.     exit('Не удалось открыть файл test.xml.');
    11. }
    12. ?>
     
  21. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    а. вроде понял. Т.е. вы хотите сначала загрузить файл, а затем его и парсить?
    Честно, не знаю, можно ли будет считать файл прямо из массива $_FILES. Но попробуйте, если никто другой не отпишется.
    Если так работать будет, то просто
    Код (Text):
    1. $file = $_FILES['userfile'];
    2. $xml = simplexml_load_file($file);
    Если не выйдет так, то придётся сохранять файл на сервере, а затем уже использовать его в скрипте.
     
  22. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    Очень обидно, Но пустой экран к сожелению =(
    А про это где можно прочитать или пример посмотреть?!

    Добавлено спустя 3 минуты 56 секунд:
    хотя в логах апача
    Код (Text):
    1. [Tue May 12 17:53:29.079416 2015] [:error] [pid 13405] [client 192.168.192.1:63846] PHP Parse error:  syntax error, unexpected '}' in /var/www/html/par$
    Код (Text):
    1. $ml/pars.php on line 125, referer: http://192.168.192.134/upload.php
     
  23. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    что в 125 строке?
     
  24. samara

    samara Новичок

    С нами с:
    5 май 2015
    Сообщения:
    46
    Симпатии:
    0
    125 строка
    Код (Text):
    1. } else {
    Может это изменить нужно?!
    Код (Text):
    1.     print_r($xml);
    2. } else {
    3.     exit('Не удалось открыть файл test.xml.');
    4. }
    5. ?>
    124-126:
    Код (Text):
    1.  
    2. } else {
    3.   exit('Не удалось открыть файл xml.');
    4. }
     
  25. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    ничего тут не вижу. Покажите всё условие.