[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Атрибуты с XML
Mizka
есть 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 = ""; }

возможно есть более оптимальный подход? если елементов в хмл будет много, страшно подумать как это все в цикле перебирать sad.gif количество атрибутов в хмл может меняться.



Спустя 11 минут, 27 секунд (23.06.2009 - 19:07) glock18 написал(а):
Цитата (Mizka @ 23.06.2009 - 15:56)
возможно есть более оптимальный подход?


есть smile.gif

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']))

работает smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.