Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Данные их XML в Бд MySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (4): [1] 2 3 4 »   

> Без описания
SofiaKit
Отправлено: 12 Июля, 2013 - 09:30:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Можно ли данные как-то вытягивать из xml такого типа:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="windows-1251"?>
  2. <DataPaket Version="3.9" DateTime="22.05.2013 9:08:35" Type="Aggregated" AZSCode="№ 1">
  3.         <Sessions>
  4.                 <Session SessionNum="688" StartDateTime="21.05.2013 9:29:32" EndDateTime="22.05.2013 9:01:32" UserName="Зашихина В">
  5.                         <Tanks>
  6.                                 <Tank TankNum="1" StartFuelVolume="3349,69" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  7.                                 <Tank TankNum="2" StartFuelVolume="3504,98" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  8.                                 <Tank TankNum="3" StartFuelVolume="5667,19" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  9.                                 <Tank TankNum="4" StartFuelVolume="11700,87" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  10.                         </Tanks>


и заносить в бд MySQL, есть ли примеры?
 
 Top
LIME
Отправлено: 12 Июля, 2013 - 09:32:17
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




http://php.net/manual/ru/book.simplexml.php
смотри главу примеры
 
 Top
SofiaKit
Отправлено: 12 Июля, 2013 - 11:17:28
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




какой-то тип xml не подходящий... там текст пишется после тега, а у меня в теге...

в корне лежит файл:
SesDataExport_13.05.22_09-08-35.xml
содержимое:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="windows-1251"?>
  2. <DataPaket Version="3.9" DateTime="22.05.2013 9:08:35" Type="Aggregated" AZSCode="№ 1">
  3.         <Sessions>
  4.                 <Session SessionNum="688" StartDateTime="21.05.2013 9:29:32" EndDateTime="22.05.2013 9:01:32" UserName="Зашихина В">
  5.                         <Tanks>
  6.                                 <Tank TankNum="1" StartFuelVolume="3349,69" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  7.                                 <Tank TankNum="2" StartFuelVolume="3504,98" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  8.                                 <Tank TankNum="3" StartFuelVolume="5667,19" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  9.                                 <Tank TankNum="4" StartFuelVolume="11700,87" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  10.                         </Tanks>
  11.                         <Hoses>
  12.                                 <Hose HoseNum="1" StartCounter="18270,42" EndCounter="18270,42" PumpNum="1" NumInPump="1" HoseType="1"/>
  13.                                 <Hose HoseNum="2" StartCounter="226747,09" EndCounter="226747,09" PumpNum="1" NumInPump="2" HoseType="1"/>
  14.                                 <Hose HoseNum="3" StartCounter="23864,6" EndCounter="23864,6" PumpNum="2" NumInPump="1" HoseType="1"/>
  15.                                 <Hose HoseNum="4" StartCounter="396817,94" EndCounter="396821,94" PumpNum="2" NumInPump="2" HoseType="1"/>
  16.                                 <Hose HoseNum="5" StartCounter="134308" EndCounter="134308" PumpNum="3" NumInPump="1" HoseType="1"/>
  17.                                 <Hose HoseNum="6" StartCounter="118932,09" EndCounter="118932,09" PumpNum="3" NumInPump="2" HoseType="1"/>
  18.                                 <Hose HoseNum="7" StartCounter="116489,92" EndCounter="116489,92" PumpNum="4" NumInPump="1" HoseType="1"/>
  19.                                 <Hose HoseNum="8" StartCounter="118246,22" EndCounter="118246,22" PumpNum="4" NumInPump="2" HoseType="1"/>
  20.                                 <Hose HoseNum="9" StartCounter="166468,54" EndCounter="166700,79" PumpNum="5" NumInPump="1" HoseType="1"/>
  21.                                 <Hose HoseNum="10" StartCounter="90861,41" EndCounter="90861,41" PumpNum="5" NumInPump="2" HoseType="1"/>
  22.                                 <Hose HoseNum="11" StartCounter="71818,7" EndCounter="71818,7" PumpNum="6" NumInPump="1" HoseType="1"/>
  23.                                 <Hose HoseNum="12" StartCounter="22224,68" EndCounter="22224,68" PumpNum="6" NumInPump="2" HoseType="1"/>
  24.                         </Hoses>
  25.                 </Session>
  26.         </Sessions>
  27. </DataPaket>

создала index.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $xmlstr = <<<XML
  3. include 'SesDataExport_13.05.22_09-08-35.xml';
  4. XML;
  5. $movies = new SimpleXMLElement($xmlstr);
  6.  
  7. echo $movies->Sessions[0]->StartDateTime;
  8. ?>

мне надо отобразить параметр 21.05.2013 9:29:32 который находится в StartDateTime. Что не так?
 
 Top
EuGen Администратор
Отправлено: 12 Июля, 2013 - 11:29:09
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




SofiaKit
Существует трюк для быстрой конвертации объекта в массив:
PHP:
скопировать код в буфер обмена
  1. $sXml='<?xml version="1.0" encoding="windows-1251"?>
  2.     <DataPaket Version="3.9" DateTime="22.05.2013 9:08:35" Type="Aggregated" AZSCode="№ 1">
  3.             <Sessions>
  4.                     <Session SessionNum="688" StartDateTime="21.05.2013 9:29:32" EndDateTime="22.05.2013 9:01:32" UserName="Зашихина В">
  5.                             <Tanks>
  6.                                     <Tank TankNum="1" StartFuelVolume="3349,69" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  7.                                     <Tank TankNum="2" StartFuelVolume="3504,98" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  8.                                     <Tank TankNum="3" StartFuelVolume="5667,19" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  9.                                     <Tank TankNum="4" StartFuelVolume="11700,87" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
  10.                             </Tanks>
  11.                             <Hoses>
  12.                                     <Hose HoseNum="1" StartCounter="18270,42" EndCounter="18270,42" PumpNum="1" NumInPump="1" HoseType="1"/>
  13.                                     <Hose HoseNum="2" StartCounter="226747,09" EndCounter="226747,09" PumpNum="1" NumInPump="2" HoseType="1"/>
  14.                                     <Hose HoseNum="3" StartCounter="23864,6" EndCounter="23864,6" PumpNum="2" NumInPump="1" HoseType="1"/>
  15.                                     <Hose HoseNum="4" StartCounter="396817,94" EndCounter="396821,94" PumpNum="2" NumInPump="2" HoseType="1"/>
  16.                                     <Hose HoseNum="5" StartCounter="134308" EndCounter="134308" PumpNum="3" NumInPump="1" HoseType="1"/>
  17.                                     <Hose HoseNum="6" StartCounter="118932,09" EndCounter="118932,09" PumpNum="3" NumInPump="2" HoseType="1"/>
  18.                                     <Hose HoseNum="7" StartCounter="116489,92" EndCounter="116489,92" PumpNum="4" NumInPump="1" HoseType="1"/>
  19.                                     <Hose HoseNum="8" StartCounter="118246,22" EndCounter="118246,22" PumpNum="4" NumInPump="2" HoseType="1"/>
  20.                                     <Hose HoseNum="9" StartCounter="166468,54" EndCounter="166700,79" PumpNum="5" NumInPump="1" HoseType="1"/>
  21.                                     <Hose HoseNum="10" StartCounter="90861,41" EndCounter="90861,41" PumpNum="5" NumInPump="2" HoseType="1"/>
  22.                                     <Hose HoseNum="11" StartCounter="71818,7" EndCounter="71818,7" PumpNum="6" NumInPump="1" HoseType="1"/>
  23.                                     <Hose HoseNum="12" StartCounter="22224,68" EndCounter="22224,68" PumpNum="6" NumInPump="2" HoseType="1"/>
  24.                             </Hoses>
  25.                     </Session>
  26.             </Sessions>
  27.     </DataPaket>';
  28. $rgXml = json_decode(json_encode(simplexml_load_string($sXml)), true);
  29. //var_dump($rgXml);

- соответственно, получение нужных данных сводится к обращению по нужным индексам.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
SofiaKit
Отправлено: 12 Июля, 2013 - 11:40:31
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




что-то пока не могу сообразить... не доходит...

пока вот так пробую разобраться...
PHP:
скопировать код в буфер обмена
  1. <?
  2. $smpl_xml=simplexml_load_file('SesDataExport_13.05.22_09-08-35.xml');
  3. foreach ($smpl_xml->Sessions as $car){
  4. echo "Сессия: ".$car->SessionNum." Старт-".$car->StartDateTime." Финиш-".$car->EndDateTime."<br>";
  5. }
  6. ?>
 
 Top
esterio
Отправлено: 12 Июля, 2013 - 11:41:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)





В последнее время у всех проблемы с xml

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $file = 'SesDataExport_13.05.22_09-08-35.xml';
  3. $xml = simplexml_load_file($file);
  4.  
  5.  
  6. foreach($xml->Sessions->children() as $session)
  7. {
  8.         var_dump($session['StartDateTime']); // Get only StartDateTime attribute
  9.         foreach($session->attributes() as $key=>$value)
  10.         {
  11.                 var_dump($key, (string)$value); // Display all attributes
  12.         }
  13. }


UPD. у EuGen пример попроще

(Отредактировано автором: 12 Июля, 2013 - 11:48:27)

 
 Top
EuGen Администратор
Отправлено: 12 Июля, 2013 - 11:47:41
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




SofiaKit
Примерно так:
PHP:
скопировать код в буфер обмена
  1. $rgXml=json_decode(json_encode(simplexml_load_file('SesDataExport_13.05.22_09-08-35.xml')), true);
  2. foreach($rgXml["Sessions"] as $rgSession)
  3. {
  4.    echo "Сессия: ".$rgSession["Session"]["@attributes"]["SessionNum"]." Старт-".$rgSession["Session"]["@attributes"]["StartDateTime"]." Финиш-".$rgSession["Session"]["@attributes"]["EndDateTime"]."<br>";
  5. }

На самом деле, нет принципиальной разницы - использовать ли стандартное обращение, через свойства (см. пример выше), или же конвертировать в массив. Однако с массивом проще работать - всевозможные join, explode, array_search и т.п. - окажутся как нельзя кстати, если речь идёт о записи в БД (по этой причине я и рекомендую преобразовывать в массив).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
VenZell
Отправлено: 12 Июля, 2013 - 11:50:11
Post Id


Частый гость


Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013  


Помог: 12 раз(а)




Ну или можно сделать вот так:
PHP:
скопировать код в буфер обмена
  1. $xmlstr = file_get_contents('SesDataExport_13.05.22_09-08-35.xml');
  2. $xml = new SimpleXMLElement($xmlstr);
  3. $attributes = $xml->Sessions->Session->attributes();
  4. $StartDateTime = (string) $attributes['StartDateTime'];
  5. echo $StartDateTime;

Если тэгов Session будет несколько, то это нужно будет делать в цикле. Вот так:
PHP:
скопировать код в буфер обмена
  1. $xmlstr = file_get_contents('test.xml');
  2. $xml = new SimpleXMLElement($xmlstr);
  3. $StartDateTime = array();
  4. //Перебираем все тэги Session
  5. foreach ($xml->Sessions->Session as $session){
  6.     $attributes = $session->attributes();
  7.     array_push ($StartDateTime, (string)$attributes['StartDateTime']);
  8. }
  9. print_r($StartDateTime);



upd: Блин, пока писал, условия задачи уже изменились...

(Отредактировано автором: 12 Июля, 2013 - 11:51:12)

 
 Top
SofiaKit
Отправлено: 12 Июля, 2013 - 11:51:03
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




ну потаму что это очень актуально Улыбка
а я в этом вообще нооооооль... вобщем в index.php вписала это:
PHP:
скопировать код в буфер обмена
  1. $smpl_xml=simplexml_load_file('SesDataExport_13.05.22_09-08-35.xml');
  2. print_r($smpl_xml);

и стало больше походить на то что надо =)

CODE (html):
скопировать код в буфер обмена
  1. SimpleXMLElement Object ( [@attributes] => Array ( [Version] => 3.9 [DateTime] => 22.05.2013 9:08:35 [Type] => Aggregated [AZSCode] => т&#132;&#150; 1 ) [Sessions] => SimpleXMLElement Object ( [Session] => SimpleXMLElement Object ( [@attributes] => Array ( [SessionNum] => 688 [StartDateTime] => 21.05.2013 9:29:32 [EndDateTime] => 22.05.2013 9:01:32 [UserName] => а&#151;аАб&#136;аИб&#133;аИаНаА а&#146; ) [Tanks] => SimpleXMLElement Object ( [Tank] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [TankNum] => 1 [StartFuelVolume] => 3349,69 [EndFactVolume] => [EndDensity] => [EndTemperature] => [EndHeight] => [EndMass] => [EndWater] => [TankExtCode] => ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [TankNum] => 2 [StartFuelVolume] => 3504,98 [EndFactVolume] => [EndDensity] => [EndTemperature] => [EndHeight] => [EndMass] => [EndWater] => [TankExtCode] => ) ) [2] => SimpleXMLElement Object ( [@attributes] => Array ( [TankNum] => 3 [StartFuelVolume] => 5667,19 [EndFactVolume] => [EndDensity] => [EndTemperature] => [EndHeight] => [EndMass] => [EndWater] => [TankExtCode] => ) ) [3] => SimpleXMLElement Object ( [@attributes] => Array ( [TankNum] => 4 [StartFuelVolume] => 11700,87 [EndFactVolume] => [EndDensity] => [EndTemperature] => [EndHeight] => [EndMass] => [EndWater] => [TankExtCode] => ) ) ) ) [Hoses] => SimpleXMLElement Object ( [Hose] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 1 [StartCounter] => 18270,42 [EndCounter] => 18270,42 [PumpNum] => 1 [NumInPump] => 1 [HoseType] => 1 ) ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 2 [StartCounter] => 226747,09 [EndCounter] => 226747,09 [PumpNum] => 1 [NumInPump] => 2 [HoseType] => 1 ) ) [2] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 3 [StartCounter] => 23864,6 [EndCounter] => 23864,6 [PumpNum] => 2 [NumInPump] => 1 [HoseType] => 1 ) ) [3] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 4 [StartCounter] => 396817,94 [EndCounter] => 396821,94 [PumpNum] => 2 [NumInPump] => 2 [HoseType] => 1 ) ) [4] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 5 [StartCounter] => 134308 [EndCounter] => 134308 [PumpNum] => 3 [NumInPump] => 1 [HoseType] => 1 ) ) [5] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 6 [StartCounter] => 118932,09 [EndCounter] => 118932,09 [PumpNum] => 3 [NumInPump] => 2 [HoseType] => 1 ) ) [6] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 7 [StartCounter] => 116489,92 [EndCounter] => 116489,92 [PumpNum] => 4 [NumInPump] => 1 [HoseType] => 1 ) ) [7] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 8 [StartCounter] => 118246,22 [EndCounter] => 118246,22 [PumpNum] => 4 [NumInPump] => 2 [HoseType] => 1 ) ) [8] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 9 [StartCounter] => 166468,54 [EndCounter] => 166700,79 [PumpNum] => 5 [NumInPump] => 1 [HoseType] => 1 ) ) [9] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 10 [StartCounter] => 90861,41 [EndCounter] => 90861,41 [PumpNum] => 5 [NumInPump] => 2 [HoseType] => 1 ) ) [10] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 11 [StartCounter] => 71818,7 [EndCounter] => 71818,7 [PumpNum] => 6 [NumInPump] => 1 [HoseType] => 1 ) ) [11] => SimpleXMLElement Object ( [@attributes] => Array ( [HoseNum] => 12 [StartCounter] => 22224,68 [EndCounter] => 22224,68 [PumpNum] => 6 [NumInPump] => 2 [HoseType] => 1 ) ) ) ) ) ) )


значит можно как-то переменные назначить и цикл запустить?
 
 Top
EuGen Администратор
Отправлено: 12 Июля, 2013 - 11:52:11
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




SofiaKit пишет:
значит можно как-то переменные назначить и цикл запустить?

http://forum.php.su/topic.php?fo...18861#1373618861


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
VenZell
Отправлено: 12 Июля, 2013 - 11:54:53
Post Id


Частый гость


Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013  


Помог: 12 раз(а)




PHP:
скопировать код в буфер обмена
  1. $xmlstr = file_get_contents('SesDataExport_13.05.22_09-08-35.xml');
  2. $xml = new SimpleXMLElement($xmlstr);
  3. $result = '';
  4. foreach ($xml->Sessions->Session as $session) {
  5.     $attributes = $session->attributes();
  6.     $result .= 'Сессия: ' . $attributes['SessionNum']
  7.     . '<br>Старт: ' . $attributes['StartDateTime']
  8.     . '<br>Финиш: ' . $attributes['EndDateTime']
  9.     . '<br>';
  10. }
  11. echo $result;
 
 Top
esterio
Отправлено: 12 Июля, 2013 - 11:56:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)





EuGen
Вашы примеры имеют opacity:0;
 
 Top
VenZell
Отправлено: 12 Июля, 2013 - 11:57:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013  


Помог: 12 раз(а)





esterio, я свое решение просто так написал, если камень в мой огород. Улыбка
 
 Top
SofiaKit
Отправлено: 12 Июля, 2013 - 11:58:32
Post Id


Частый гость


Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




вау... пока писала и не видела постов выше... да, класс...
теперь возникла еще одна проблема:

index.php у меня в Юникоде UTF-8 а вот сам xml в windows-1251, как можно сделать читабельным xml без вмешательства руками?
 
 Top
EuGen Администратор
Отправлено: 12 Июля, 2013 - 12:01:24
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




SofiaKit
iconv
?
Только важное уточнение. Если соберётесь конвертировать содержимое XML, то важно, чтобы в хедлайне потом была указана верная кодировка. То есть, к примеру, у Вас есть xml с первой строкой:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="windows-1251"?>

- тогда, после его конвертации в UTF-8, эта строка должна быть заменена на:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?xml version="1.0" encoding="utf-8"?>

- иначе возникнут ошибки при попытке загрузки через simplexml*


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB