Обход дерева объектов
Для получения значения текущего узла используют метод DomNode->node_value() или DomNode->get_content() для получения содержимого узла.
Для получения значения атрибута используется метод DomElement‑>get_attribute(attr_name). А метод DomNode->child_nodes() возвращает массив потомков данного узла.
Для различия объектов по типам, т.е. определения, является ли узел элементом (тегом), текстом, атрибутом и т.п., используют специальные константы. XML_ELEMENT_NODE определяет, является ли узел элементом, XML_ATTRIBUTE_NODE определяет, является ли узел атрибутом, и XML_TEXT_NODE определяет, является ли узел фрагментом текста. Эти константы имеют целочисленные значения 1, 2 и 3 соответственно.
// Обход дерева XML
<?
$xmlstr = join('',file(student.xml'));
if(!$dom = domxml_open_mem($xmlstr)) {
echo "Ошибка при разборе документа\n";
exit;
}
$root = $dom->document_element();
// Получаем массив потомков родительского узла
// (в нашем случае это массив <student>)
$nodes = $root->child_nodes();
print_r($nodes);
echo "<hr>";
// Начинаем обработку каждого узла в массиве
foreach($nodes as $node){
if ($node->tagname==' student '){
// Создаем массив, куда будем собирать информацию
// о рассматриваемом студенте
$currentStud = array();
// Получаем id студента,
$ currentStud ['id'] = $node->get_attribute('id');
// Получаем всю информацию о студенте
// (<name>,<birth> и т.д.)
$student_info = $node->child_nodes();
// Перебираем все дочерние узлы $node
foreach ($student _info as $info){
// проверяем, является ли узел
// элементом (xml-тегом)
if ($info->type==
XML_ELEMENT_NODE) {
$currentStud[$info->tagname] =
$info->get_content();
}
}
// выводим на экран полученные массивы
print_r ($currentStud);
echo "<br>";
}
}
?>
Дата добавления: 2015-08-26; просмотров: 747;