[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как привести xml-файл в ассоциативный массив?
katorok
Здравствуйте! Помогите разобраться в xml+php
у меня есть хml-файл вида

<books>

<
book>
<
athour>Name1</athour>
<
name>бла-бла-бла</name>
</
book>

<
book>
<
athour>Name2</athour>
<
name>бла-бла-бла</name>
</
book>

<
book>
<
athour>Name3</athour>
<
name>бла-бла-бла</name>
</
book>

</
books>


Благополучно подгружаю его с помощью simpleXML.
Как из него я могу получить ассоциативный массив типа
$book[$athour]=$name

где $athour - значение между <athour></athour> , a $name - значение между <name></name>

Спасибо.




Спустя 22 минуты, 58 секунд (31.08.2010 - 21:23) Nord написал(а):

$xmlstr = <<<XML
<books>
<book>
<athour>Name1</athour>
<name>бла-бла-бла</name>
</book>
<book>
<athour>Name2</athour>
<name>бла-бла-бла</name>
</book>
<book>
<athour>Name3</athour>
<name>бла-бла-бла</name>
</book>
</books>

XML;
$xml = simplexml_load_string($xmlstr);
$array = array();
foreach ($xml[0] as $node) {
$array[(string)$node->athour] = (string)$node->name;
}
var_dump($array);
//array
// 'Name1' => string 'бла-бла-бла' (length=20)
// 'Name2' => string 'бла-бла-бла' (length=20)
// 'Name3' => string 'бла-бла-бла' (length=20)


Спустя 17 минут, 3 секунды (31.08.2010 - 21:40) linker написал(а):
Пример на коленке c DOM XML (на всякий случай).
<?php

$Xml = new DomDocument();
$Xml->load('file.xml');
$XPath = new DOMXPath($Xml);
$NodeBooks = $XPath->query('//books/book');
$Result = array();
foreach($NodeBooks as $Node)
{
foreach($Node->childNodes as $ChildNode)
{
if ($ChildNode->nodeType != XML_ELEMENT_NODE) continue;
if ($ChildNode->nodeName == 'athour')
$Author = $ChildNode->nodeValue;
else
if
($ChildNode->nodeName == 'name')
$Name = $ChildNode->nodeValue;
}
$Result[$Author] = $Name;
}
print_r($Result);
?>
Быстрый ответ:

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