DOM XML определяет в PHP несколько классов, таких как DomNode, DomDocument, DomElement, DomText и DomAttribute, большинство из которых идут из ядра стандарта DOM. Для всех перечисленных выше классов класс DomNode является родительским, поэтому его свойства и методы наследуются всеми остальными классами.
Если рассмотреть произвольный XML-документ, то классу DomDocument будет соответствовать сам этот документ, классу DomElement – каждый XML-тег, классу DomAttribute – атрибуты тегов, а классу DomText – содержание XML-элементов. В то же время классу DomNode будет соответствовать каждый из перечисленных элементов XML-документа.
Рассмотрим пример описания списка студентов. Каждый студент описан с помощью таких характеристик, как фамилия, имя, дата рождения и электронный адрес. Структура XML документа, хранящего список студентов, будет следующая:
//student.xml
<?xml version="1.0"?>
<list>
<student id="10">
<name>
<first>Petr</first>
<last>Petrov</last>
</name>
<birth>
<day>23</day>
<month>12</month>
<year>89</year>
</birth>
<email> petr@ngs.ru </email>
</ student >
< student id="20">
<name>
<first>Ivan</first>
<last>Ivanov</last>
</name>
<birth>
<day>03</day>
<month>05</month>
<year>90</year>
</birth>
<email> ivan@ngs.ru </email>
</ student >
</list>
Рассмотрим возможности читать, добавлять, изменять и искать информацию, находящуюся в XML-файлах.
Сначала необходимо перевести имеющиеся данные в объекты и классы DOM. Это можно сделать с помощью функции domxml_open_memиdomxml_open_file.
В качестве параметра эта функция принимает строку str, содержащую XML-документ. Результатом ее работы является объект класса, называемого DOMDocument.
Эта функция обрабатывает XML-файл, имя которого задается параметром filename, и переводит его в объект класса DOMDocument. Доступ к файлу производится только на чтение.
Функции domxml_open_mem() и domxml_open_file() нужно вызывать перед вызовом любых других функций, связанных с расширением DOM.
Эти функции преобразуют XML-файл в дерево объектов. К этим объектам можно обращаться с помощью различных методов. Для выделения корневого элемента используется метод DomDocument->document_element().
Для создания нового пустого XML-документа используют функция domxml_new_doc(string version), которая создает новый пустой XML-документ. Ее параметром является номер версии создаваемого документа.
<?
//считываем файл " student.xml " в строку
$xmlstr = join('',file(' student.xml.xml'));
// переводим строку с xml-файлом в дерево объектов.
if(!$dom = domxml_open_mem($xmlstr)) {
//Если операция прошла неудачно, то выводим ошибку и прекращаем работу.
echo "Ошибка при разборе документа\n";
exit;
}
print_r($dom);
echo "<hr>";
// выделяем корневой элемент дерева объектов.
// В нашем случае это будет элемент <list>
$root = $dom->document_element();
print_r($root);
echo "<hr>";
?>
Каждому элементу XML-файла мы поставили в соответствие какой-то объект. Теперь рассмотрим возможность перемещаться по дереву объектов и обращаться с этими объектами: получать и изменять их значения, находить их потомков и предков, удалять объекты.