Работа с атрибутами узлов в XML-документе через DOM
Продолжим тему DOM, и сегодня мы затронем работу с атрибутами узлов в XML-документе через DOM. В данной статье Вы научитесь считывать значения атрибутов у узлов, а также устанавливать новые значения у существующих атрибутов и создавать новые.
Привожу сразу достаточно прозрачный пример:
<?php
$dom = new domDocument("1.0", "utf-8"); // Создаём XML-документ версии 1.0 с кодировкой utf-8
/* Текст XML-документа */
$xml = "<?xml version='1.0' encoding='utf-8'?>
<root><el a='6'>Элемент 1</el><el>Элемент 2</el></root>";
$dom->loadXML($xml); // Загружаем в объект domDocument XML-разметку
$root = $dom->documentElement; // Добираемся до корневого элемента root
$el_1 = $root->firstChild; // Первый дочерний элемент у root
$el_2 = $el_1->nextSibling; // Ближайший сосед после 1-го элемента el
echo $el_1->getAttribute("a"); // Выводим значение атрибута "a" у 1-го элемента el
echo "<br />"; // Переходим на следующую строку в браузере
$el_2->setAttribute("b", 8); // Устанавливаем атрибут "b" со значением 8 у 2-го элемента el
echo $el_2->getAttribute("b"); // Выводим значение атрибута "b" у 1-го элемента el
?>
Не думаю, что у кого-то возникнут проблемы с пониманием кода, поэтому я здесь добавил ещё парочку полезных свойств, которые иногда используются. Это свойства класса domNode, которые называются: firstChild и nextSibling. Первое свойство возвращает самый первый дочерний узел у элемента, к которому мы обращаемся. А второе свойство возвращает элемент, следующий сразу же за тем, к которому мы обращаемся. В примере, мы обращаемся к "Элементу 1", а получаем следующий элемент, в нашем случае, это "Элемент 2". Надеюсь, понятно объяснил.
Свойств и методов у классов из стандарта DOM очень много, все их можно посмотреть в справочнике, а здесь я лишь привожу некоторые примеры их использования. Самое главное, что Вы должны научиться делать - это создавать XML-документы и разбирать их, и к этому мы постепенно идём.
-
- Михаил Русаков
Комментарии (2):
А здесь ещё и такая ошибка добавилась: Fatal error: Call to a member function getAttribute() on a non-object in Z:\home\domain\www\DOM_attribute.php on line 9
Ответить
Немного неправильное обращение к элементам. $el_1 = $root->firstChild; обращется к пустому текстому узлу, обращение, именно , к элементу $el_1 = $root->firstChild->nextSibling; , следовательно к след элементу $el_2 = $el_1->nextSibling->nextSibling; , чтобы пропустить след. пустой текстовый узел. IE до версии 9 не генерировал узлы из пробелов. Это очень важно, т.к. приводит к тому, что DOM-дерево в IE6,7,8 не такое как в остальных браузерах. Это актуально для html DOM, мб и в xml что-то подобное
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.