<?
// сначала делаем то же,
// что и в предыдущем примере
$xmlstr = join('',file('persons.xml'));
if(!$dom = domxml_open_mem($xmlstr)) {
  echo "Ошибка при разборе документа\n";
  exit;
}
$root = $dom->document_element();
// Получаем массив потомков
// родительского узла
// (в нашем случае это массив <person>)
$nodes = $root->child_nodes();
print_r($nodes);
echo "<hr>";
// Начинаем обработку каждого
// узла в массиве
foreach($nodes as $node){
    // Если текущий узел – один
    // из узлов <person>, то
    // продолжаем ее обработку,
    // чтобы получить информацию
    // об этой личности
    if ($node->tagname=='person'){
    // Создаем массив, куда
    // будем собирать информацию
    // о рассматриваемой личности
    $currentPers = array();
    // Получаем id личности,
    // который хранится в атрибуте 'id'
    $currentPers['id'] = 
          $node->get_attribute('id');
    // Получаем массив потомков
    // <person>. Это вся
    // информация о личности
    // (<name>,<birth> и т.д.)
    $persons_info = 
                $node->child_nodes();
    // Перебираем все дочерние
    // узлы $node
    foreach ($persons_info as $info){
    // проверяем, является ли узел
    // элементом (xml-тегом)
    if ($info->type==
                  XML_ELEMENT_NODE) {
        // тогда метод tagname
        // возвратит имя этого  
        // элемента (тега), а метод
        // get_content() –
        // его содержимое
        $currentPers[$info->tagname] =
                 $info->get_content();
        }
    }
    // выводим на экран полученные
    // массивы
    print_r ($currentPers);
                                        
    echo "<br>";
    }
}
?>

Пример 14.4. Обход дерева XML
Закрыть окно