есть XML-ка
Код |
<?xml version="1.0"?> <elements> <text type="zzz" name="bybyby" size="20"/> ... </elements>
|
Надо вытащить с неё атрибуты и присвоить их переменным $type, $name, $size...
PHP |
$xml = simplexml_load_file('create.xml'); foreach($xml->text->attributes() as $a => $b) {
$properties[$a] = $b; } $key = "size"; if(array_key_exists($key, $properties)) { $size = $properties[$key]; echo "size=".$size; } else { $size = ""; } $key = "name"; if(array_key_exists($key, $properties)) { $name = $properties[$key]; echo "name=".$name; } else { $name = ""; } |
возможно есть более оптимальный подход? если елементов в хмл будет много, страшно подумать как это все в цикле перебирать
количество атрибутов в хмл может меняться.
Спустя 11 минут, 27 секунд (23.06.2009 - 19:07) glock18 написал(а):
Цитата (Mizka @ 23.06.2009 - 15:56) |
возможно есть более оптимальный подход? |
есть
PHP |
$xml = simplexml_load_file('create.xml'); foreach($xml->text->attributes() as $a => $b) { $$a = $b; } |
или вооот тааак
PHP |
// для цикла $xml = simplexml_load_file('create.xml'); $i = 0; while ($element = $xml->text[$i++]) { foreach($element->attributes() as $a => $b) { $$a[$i] = $b; } } |
в общем то вариантов тыщща и один.
Спустя 23 часа, 13 минут, 43 секунды (24.06.2009 - 18:21) Mizka написал(а):
Цитата |
в общем то вариантов тыщща и один. |
я знаю, уже много вариантов перепробовал...
надо что бы получилось к примеру с:
Код |
<?xml version="1.0"?> <elements> <text type="text2" name="test" size="20"/> <text type="text3" name="testss" size="20"/> </elements>
|
такое:
Код |
$arr[text2] = array("name" => "test", "size" => "20"); $arr[text3] = array("name" => "test", "size" => "20"); ...
|
Как не пытался сделать получается каша в одном массиве
Спустя 1 час, 20 минут, 28 секунд (24.06.2009 - 19:41) glock18 написал(а):
всего? попробуй еще. это, на самом деле, очень просто.
второй вариант достаточно просто переделывается под это.
Спустя 12 часов, 24 минуты (25.06.2009 - 08:05) Mizka написал(а):
Сделал по другому:
PHP |
$xml = simplexml_load_file('create.xml'); foreach ($xml->children() as $parent => $child) { $types[] = $child; }
for ($i = 0; $i<= sizeof($types); $i++) { $key = "size"; if(array_key_exists($key, (array)$types[$i])) { echo "yeees"; } } |
Теперь формируются два правильных массива. но функция array_key_exists ничего не находит. через print_r выводил массив в нем $key есть. через:
PHP |
if(in_array("size", (array)$types[$i])) |
такой же результат.
Спустя 1 час, 4 минуты, 28 секунд (25.06.2009 - 09:10) glock18 написал(а):
я бы посоветовал использовать isset вместо in_array, array_key_exists и тому подобного.
Спустя 5 часов, 22 минуты, 8 секунд (25.06.2009 - 14:32) Mizka написал(а):
Спасибо, сделал так:
PHP |
if(isset($types[$i]['size'])) |
работает