PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
SofiaKit
Отправлено: 12 Июля, 2013 - 09:30:08
Частый гость
Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010
Помог: 0 раз(а)
Можно ли данные как-то вытягивать из xml такого типа:
CODE (
htmlphp ):
скопировать код в буфер обмена
<? xml version= "1.0" encoding= "windows-1251" ?>
< DataPaket Version= "3.9" DateTime= "22.05.2013 9:08:35" Type= "Aggregated" AZSCode= "№ 1" >
< Sessions>
< Session SessionNum= "688" StartDateTime= "21.05.2013 9:29:32" EndDateTime= "22.05.2013 9:01:32" UserName= "Зашихина В" >
< Tanks>
< Tank TankNum= "1" StartFuelVolume= "3349,69" EndFactVolume= "" EndDensity= "" EndTemperature= "" EndHeight= "" EndMass= "" EndWater= "" TankExtCode= "" />
< Tank TankNum= "2" StartFuelVolume= "3504,98" EndFactVolume= "" EndDensity= "" EndTemperature= "" EndHeight= "" EndMass= "" EndWater= "" TankExtCode= "" />
< Tank TankNum= "3" StartFuelVolume= "5667,19" EndFactVolume= "" EndDensity= "" EndTemperature= "" EndHeight= "" EndMass= "" EndWater= "" TankExtCode= "" />
< Tank TankNum= "4" StartFuelVolume= "11700,87" EndFactVolume= "" EndDensity= "" EndTemperature= "" EndHeight= "" EndMass= "" EndWater= "" TankExtCode= "" />
</ Tanks>
и заносить в бд MySQL, есть ли примеры?
SofiaKit
Отправлено: 12 Июля, 2013 - 11:17:28
Частый гость
Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010
Помог: 0 раз(а)
какой-то тип xml не подходящий... там текст пишется после тега, а у меня в теге...
в корне лежит файл:
SesDataExport_13.05.22_09-08-35.xml
содержимое:
CODE (
htmlphp ):
скопировать код в буфер обмена
<? xml version= "1.0" encoding= "windows-1251" ?>
< DataPaket Version= "3.9" DateTime= "22.05.2013 9:08:35" Type= "Aggregated" AZSCode= "№ 1" >
< Sessions>
< Session SessionNum= "688" StartDateTime= "21.05.2013 9:29:32" EndDateTime= "22.05.2013 9:01:32" UserName= "Зашихина В" >
< Tanks>
< Tank TankNum= "1" StartFuelVolume= "3349,69" EndFactVolume= "" EndDensity= "" EndTemperature= "" EndHeight= "" EndMass= "" EndWater= "" TankExtCode= "" />
< Tank TankNum= "2" StartFuelVolume= "3504,98" EndFactVolume= "" EndDensity= "" EndTemperature= "" EndHeight= "" EndMass= "" EndWater= "" TankExtCode= "" />
< Tank TankNum= "3" StartFuelVolume= "5667,19" EndFactVolume= "" EndDensity= "" EndTemperature= "" EndHeight= "" EndMass= "" EndWater= "" TankExtCode= "" />
< Tank TankNum= "4" StartFuelVolume= "11700,87" EndFactVolume= "" EndDensity= "" EndTemperature= "" EndHeight= "" EndMass= "" EndWater= "" TankExtCode= "" />
</ Tanks>
< Hoses>
< Hose HoseNum= "1" StartCounter= "18270,42" EndCounter= "18270,42" PumpNum= "1" NumInPump= "1" HoseType= "1" />
< Hose HoseNum= "2" StartCounter= "226747,09" EndCounter= "226747,09" PumpNum= "1" NumInPump= "2" HoseType= "1" />
< Hose HoseNum= "3" StartCounter= "23864,6" EndCounter= "23864,6" PumpNum= "2" NumInPump= "1" HoseType= "1" />
< Hose HoseNum= "4" StartCounter= "396817,94" EndCounter= "396821,94" PumpNum= "2" NumInPump= "2" HoseType= "1" />
< Hose HoseNum= "5" StartCounter= "134308" EndCounter= "134308" PumpNum= "3" NumInPump= "1" HoseType= "1" />
< Hose HoseNum= "6" StartCounter= "118932,09" EndCounter= "118932,09" PumpNum= "3" NumInPump= "2" HoseType= "1" />
< Hose HoseNum= "7" StartCounter= "116489,92" EndCounter= "116489,92" PumpNum= "4" NumInPump= "1" HoseType= "1" />
< Hose HoseNum= "8" StartCounter= "118246,22" EndCounter= "118246,22" PumpNum= "4" NumInPump= "2" HoseType= "1" />
< Hose HoseNum= "9" StartCounter= "166468,54" EndCounter= "166700,79" PumpNum= "5" NumInPump= "1" HoseType= "1" />
< Hose HoseNum= "10" StartCounter= "90861,41" EndCounter= "90861,41" PumpNum= "5" NumInPump= "2" HoseType= "1" />
< Hose HoseNum= "11" StartCounter= "71818,7" EndCounter= "71818,7" PumpNum= "6" NumInPump= "1" HoseType= "1" />
< Hose HoseNum= "12" StartCounter= "22224,68" EndCounter= "22224,68" PumpNum= "6" NumInPump= "2" HoseType= "1" />
</ Hoses>
</ Session>
</ Sessions>
</ DataPaket>
создала index.php:
PHP:
скопировать код в буфер обмена
<?PHP
$xmlstr = <<<XML
include 'SesDataExport_13.05.22_09-08-35.xml';
XML ;
$movies = new SimpleXMLElement( $xmlstr ) ;
echo $movies -> Sessions [ 0] -> StartDateTime ;
?>
мне надо отобразить параметр 21.05.2013 9:29:32 который находится в StartDateTime . Что не так?
EuGen
Отправлено: 12 Июля, 2013 - 11:29:09
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin
Помог: 707 раз(а)
SofiaKit
Существует трюк для быстрой конвертации объекта в массив:
PHP:
скопировать код в буфер обмена
$sXml='<? xml version= "1.0" encoding= "windows-1251" ?>
<DataPaket Version="3.9" DateTime="22.05.2013 9:08:35" Type="Aggregated" AZSCode="№ 1">
<Sessions>
<Session SessionNum="688" StartDateTime="21.05.2013 9:29:32" EndDateTime="22.05.2013 9:01:32" UserName="Зашихина В">
<Tanks>
<Tank TankNum="1" StartFuelVolume="3349,69" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
<Tank TankNum="2" StartFuelVolume="3504,98" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
<Tank TankNum="3" StartFuelVolume="5667,19" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
<Tank TankNum="4" StartFuelVolume="11700,87" EndFactVolume="" EndDensity="" EndTemperature="" EndHeight="" EndMass="" EndWater="" TankExtCode=""/>
</Tanks>
<Hoses>
<Hose HoseNum="1" StartCounter="18270,42" EndCounter="18270,42" PumpNum="1" NumInPump="1" HoseType="1"/>
<Hose HoseNum="2" StartCounter="226747,09" EndCounter="226747,09" PumpNum="1" NumInPump="2" HoseType="1"/>
<Hose HoseNum="3" StartCounter="23864,6" EndCounter="23864,6" PumpNum="2" NumInPump="1" HoseType="1"/>
<Hose HoseNum="4" StartCounter="396817,94" EndCounter="396821,94" PumpNum="2" NumInPump="2" HoseType="1"/>
<Hose HoseNum="5" StartCounter="134308" EndCounter="134308" PumpNum="3" NumInPump="1" HoseType="1"/>
<Hose HoseNum="6" StartCounter="118932,09" EndCounter="118932,09" PumpNum="3" NumInPump="2" HoseType="1"/>
<Hose HoseNum="7" StartCounter="116489,92" EndCounter="116489,92" PumpNum="4" NumInPump="1" HoseType="1"/>
<Hose HoseNum="8" StartCounter="118246,22" EndCounter="118246,22" PumpNum="4" NumInPump="2" HoseType="1"/>
<Hose HoseNum="9" StartCounter="166468,54" EndCounter="166700,79" PumpNum="5" NumInPump="1" HoseType="1"/>
<Hose HoseNum="10" StartCounter="90861,41" EndCounter="90861,41" PumpNum="5" NumInPump="2" HoseType="1"/>
<Hose HoseNum="11" StartCounter="71818,7" EndCounter="71818,7" PumpNum="6" NumInPump="1" HoseType="1"/>
<Hose HoseNum="12" StartCounter="22224,68" EndCounter="22224,68" PumpNum="6" NumInPump="2" HoseType="1"/>
</Hoses>
</Session>
</Sessions>
</DataPaket>';
$rgXml = json_decode(json_encode(simplexml_load_string($sXml)), true);
//var_dump($rgXml);
- соответственно, получение нужных данных сводится к обращению по нужным индексам.
-----Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
SofiaKit
Отправлено: 12 Июля, 2013 - 11:40:31
Частый гость
Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010
Помог: 0 раз(а)
что-то пока не могу сообразить... не доходит...
пока вот так пробую разобраться...
PHP:
скопировать код в буфер обмена
<?
foreach ( $smpl_xml -> Sessions as $car ) {
echo "Сессия: " . $car -> SessionNum . " Старт-" . $car -> StartDateTime . " Финиш-" . $car -> EndDateTime . "<br>" ;
}
?>
esterio
Отправлено: 12 Июля, 2013 - 11:41:42
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012
Откуда: Украина, Львов
Помог: 127 раз(а)
В последнее время у всех проблемы с xml
PHP:
скопировать код в буфер обмена
<?PHP
$file = 'SesDataExport_13.05.22_09-08-35.xml' ;
foreach ( $xml -> Sessions -> children ( ) as $session )
{
var_dump ( $session [ 'StartDateTime' ] ) ; // Get only StartDateTime attribute foreach ( $session -> attributes ( ) as $key => $value )
{
var_dump ( $key , ( string
) $value ) ; // Display all attributes }
}
UPD. у EuGen пример попроще(Отредактировано автором: 12 Июля, 2013 - 11:48:27)
EuGen
Отправлено: 12 Июля, 2013 - 11:47:41
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin
Помог: 707 раз(а)
SofiaKit
Примерно так:
PHP:
скопировать код в буфер обмена
foreach ( $rgXml [ "Sessions" ] as $rgSession )
{
echo "Сессия: " . $rgSession [ "Session" ] [ "@attributes" ] [ "SessionNum" ] . " Старт-" . $rgSession [ "Session" ] [ "@attributes" ] [ "StartDateTime" ] . " Финиш-" . $rgSession [ "Session" ] [ "@attributes" ] [ "EndDateTime" ] . "<br>" ;
}
На самом деле, нет принципиальной разницы - использовать ли стандартное обращение, через свойства (см. пример выше), или же конвертировать в массив. Однако с массивом проще работать - всевозможные join, explode, array_search и т.п. - окажутся как нельзя кстати, если речь идёт о записи в БД (по этой причине я и рекомендую преобразовывать в массив).
-----Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
VenZell
Отправлено: 12 Июля, 2013 - 11:50:11
Частый гость
Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013
Помог: 12 раз(а)
Ну или можно сделать вот так:
PHP:
скопировать код в буфер обмена
$xml = new SimpleXMLElement( $xmlstr ) ;
$attributes = $xml -> Sessions -> Session -> attributes ( ) ;
$StartDateTime = ( string) $attributes [ 'StartDateTime' ] ;
echo $StartDateTime ;
Если тэгов Session будет несколько, то это нужно будет делать в цикле. Вот так:
PHP:
скопировать код в буфер обмена
$xml = new SimpleXMLElement( $xmlstr ) ;
$StartDateTime = array ( ) ; //Перебираем все тэги Session
foreach ( $xml -> Sessions -> Session as $session ) {
$attributes = $session -> attributes ( ) ;
array_push ( $StartDateTime , ( string
) $attributes [ 'StartDateTime' ] ) ; }
upd : Блин, пока писал, условия задачи уже изменились...(Отредактировано автором: 12 Июля, 2013 - 11:51:12)
SofiaKit
Отправлено: 12 Июля, 2013 - 11:51:03
Частый гость
Покинул форум
Сообщений всего: 182
Дата рег-ции: Сент. 2010
Помог: 0 раз(а)
ну потаму что это очень актуально
а я в этом вообще нооооооль... вобщем в index.php вписала это:
и стало больше походить на то что надо =)
CODE (
html ):
скопировать код в буфер обмена
SimpleXMLElement Object ( [@attributes] => Array ( [Version] => 3.9 [DateTime] => 22.05.2013 9:08:35 [Type] => Aggregated [AZSCode] => т„– 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] => а— аАбˆ аИб… аИаНаА а’ ) [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 ) ) ) ) ) ) )
значит можно как-то переменные назначить и цикл запустить?
VenZell
Отправлено: 12 Июля, 2013 - 11:54:53
Частый гость
Покинул форум
Сообщений всего: 237
Дата рег-ции: Июнь 2013
Помог: 12 раз(а)
PHP:
скопировать код в буфер обмена
$xml = new SimpleXMLElement( $xmlstr ) ;
$result = '' ;
foreach ( $xml -> Sessions -> Session as $session ) {
$attributes = $session -> attributes ( ) ;
$result .= 'Сессия: ' . $attributes [ 'SessionNum' ]
. '<br>Старт: ' . $attributes [ 'StartDateTime' ]
. '<br>Финиш: ' . $attributes [ 'EndDateTime' ]
. '<br>' ;
}
echo $result ;
Поиск в теме | Версия для печати
Страниц (4): [1] 2 3 4 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB