Доброго дня суток. Прошу помощи нужно спарсить значения xml файла. Сам я написал кое что но проблема в том что не получается вывести значения из 2 цикла в общий запрос чтобы занести данные в базу. Тут для наглядности сделал вывод через echo. $x выводится нормально а вот с $y запара... PHP: $xml = simplexml_load_string( ' <list> <a id="1" type="type1" name="name1"> <set val1="1val" /> <set val2="2val" /> <set val3="3val" /> <set val4="4val" /> <set val5="5val /> </a> </list> '); global $x; global $y; foreach ($xml->children() as $site) { $x = "'".$site[id]."', '".$site[type]."', '".$site[name]."'"; } foreach ($site->children() as $subsite) { $y = $subsite[val1].$subsite[val12].$subsite[val13]; } echo $x.$y; ?>
Может быть так? PHP: <?php $string = <<<XML <?xml version='1.0'?> <list> <a id="1" type="type1" name="name1"> <set val="1val" /> <set val="2val" /> <set val="3val" /> <set val="4val" /> <set val="5val" /> </a> </list> XML; $xml = simplexml_load_string($string); global $x; global $y; foreach ($xml->children() as $site) { $x = "'".$site['id']."', '".$site['type']."', '".$site['name']."'"; foreach ($site->children() as $subsite) { $y = $subsite['val']; echo "$x:$y <br />\n"; } }
Спасибо за старания. К сожалению имена менять нельзя т.к. нужна выборка по опр именнам т.е. нужно вывести к примеру val1 и val3. Вобще тело xmlки очень большое и там много записей которые идут попорядку с идшниками и данными. В вашем же примере в 2 цикле будет выводится немного не то что мне нужно. Вот пример, нужно данные из каждого контейнера сформировать в один запрос например (правильность запроса написал на память поэтому с ошибками но сути не меняет). Необходимо чтобы после цикла данные были в какой то переменной чтобы произвести запрос а потом обнулить переменную для последующего прохода цикла уже с другим идшником. INSERT INTO table (id,type,name,val1,val3,val4,val5) VALUES(`1`, `type1`, `name1`, `1val`, `3val, `4val`, `5val`) INSERT INTO table (id,type,name,val1,val3,val4,val5) VALUES(`2`, `type2`, `name2`, `1val`, `3val, `4val`, `5val`) INSERT INTO table (id,type,name,val1,val3,val4,val5) VALUES(`3`, `type3`, `name3`, `1val`, `3val, `4val`, `5val`) INSERT INTO table (id,type,name,val1,val3,val4,val5) VALUES(`4`, `type4`, `name4`, `1val`, `3val, `4val`, `5val`) PHP: <list> <a id="1" type="type1" name="name1"> <set val1="1val" /> <set val2="2val" /> <set val3="3val" /> <set val4="4val" /> <set val5="5val /> </a> <a id="2" type="type2" name="name2"> <set val1="1val" /> <set val2="2val" /> <set val3="3val" /> <set val4="4val" /> <set val5="5val /> </a> <a id="3" type="type3" name="name3"> <set val1="1val" /> <set val2="2val" /> <set val3="3val" /> <set val4="4val" /> <set val5="5val /> </a> <a id="4" type="type4" name="name4"> <set val1="1val" /> <set val2="2val" /> <set val3="3val" /> <set val4="4val" /> <set val5="5val /> </a> </list> Думаю так понятнее обьяснил
PHP: <?php $string = <<<XML <?xml version='1.0'?> <list> <a id="1" type="type1" name="name1"> <set val1="1val" /> <set val2="2val" /> <set val3="3val" /> <set val4="4val" /> <set val5="5val" /> </a> </list> XML; $xml = simplexml_load_string($string); global $x;- global $y;- foreach ($xml->children() as $site)- { $x = "'".$site['id']."', '".$site['type']."', '".$site['name']."'"; $y = array(); foreach ($site->children() as $subsite){ foreach ($subsite->attributes() as $key => $value){ $y[$key] = (string) $value; } } $string = implode(', ', $y); print_r($string); }