DOM
Типы узлов DOM
Дерево DOM
Класс domNode
Класс domNode
Создание объекта DOM
Загрузка документа в DOM
Класс domNode
Загрузка документа в DOM
Загрузка документа в DOM. Класс domDocument
Создание узлов DOM. Класс domDocument
Создание узлов DOM с помощью PHP
Создание узлов DOM с помощью PHP
Создание узлов DOM с помощью PHP
Создание узлов DOM с помощью PHP
Создание узлов DOM с помощью PHP
Корректировка узлов DOM. Класс NodeList
Корректировка узлов DOM. Класс NodeList
Удаление узлов DOM
Удаление узлов DOM
XPath-адресация
XPath-адресация
XPath-адресация
177.01K
Категория: ПрограммированиеПрограммирование

DOM Document Object Model - объектная модель документа

1. DOM

DOM — Document Object Model — объектная модель
документа, стандартизованная консорциумом W3C
DOM — программный интерфейс доступа к структуре и
содержимому размеченных документов для создания,
ведения и анализа структуры и контента
DOM — кэш для хранения экземпляра XML-документа

2. Типы узлов DOM

Наименование
Document
DocumentFragment
Entity
EntityReference
DocumentType
Element
Attr
Text
Comment
CDATASection
ProcessingInstruction
Описание
Корень древовидной структуры DOM
Набор элементов, относящийся к дереву
DOM или подготовленный для добавления к
его структуре
Сущность, объявленная в разделе DTD
Ссылка на сущность из раздела DTD
Заголовок DTD-схемы документа
Элемент документа
Атрибут элемента документа
Текстовое содержимое элементов
и значения атрибутов
Комментарий в документе
Раздел CDATA
Инструкция по обработке

3. Дерево DOM

DOM создает в памяти древовидную версию документа
из XML-источника данных

4. Класс domNode

Корневым классом для всех DOM-объектов является
класс domNode (узел). Все остальные классы узлов,
определенные в стандарте DOM, являются подклассами этого
класса.
Методы класса domNode:
nodeType — определение типа узла;
tagName — имя элемента, name — имя атрибута ;
nodeValue — значение узла;

5. Класс domNode

parentNode — предок контекстного узла:
$node -> parentNode -> tagName;
firstChild — первый дочерний узел:
$node -> firstChild -> tagName;
lastChild — последний дочерний узел:
$node -> lastChild -> tagName;
previousSibling — узел, предыдущий контекстному
в иерархии предка:
$node -> previousSibling -> tagName;
nextSibling — узел, следующий за контекстным в
иерархии предка:
$node -> nextSibling -> tagName

6. Создание объекта DOM

PHP — модуль DOM XML, класс DOMDocument
$dom = new DOMDocument ();
$dom = new DOMDocument ('1.0');

7. Загрузка документа в DOM

Свойства класса DomDocument :
PreserveWhiteSpace — определяет режим обработки пустых текстовых
полей (указание не убирать лишние пробелы и отступы. По
умолчанию TRUE).
$dom = new domDocument ();
$dom->preserveWhiteSpace=false;
$dom->load('goods.xml') ;
$root = $dom->documentElement;
echo $root->childNodes->length;
ValidateOnParse — позволяет во время чтения XML-файла проверять его
корректность на основе документов, описывающих схему анализируемого
XML-документа. (загружает DTD и проверяет документ на соответствие. По
умолчанию FALSE).

8. Класс domNode

Свойства класса DomDocument :
ResolveExternals — разрешает при вводе XML-файла подключать
указанные в данном файле внешние XML-документы.
(Применяется при включении элементов с символьными
данными в XML документ. По умолчанию FALSE.)
FormatOutput — формируется XML-документ с отступами
и дополнительными пробелами.
Doctype — указатель на описатель DocType документа.
Представляет описатель <! doctype ... > XML-документа. Узел
domDocumentType не имеет дочерних элементов, но содержит два
свойства: ENTITYи NOTATION, представляющих описатели.
DocumentEiement — указатель на корневой элемент документа.

9. Загрузка документа в DOM

Варианты:
Загрузка из файла
Загрузка из строки
Загрузка из потока
Методы класса DomDocument :
Load()
LoadXML()
Save()
saveXML ()

10. Загрузка документа в DOM. Класс domDocument

$UsersInfoXML
=
"<user><login>nagibator</login><pass>
qwerty</pass><name><firstname></firstname><lastname></lastna
me><secondname></secondname></name><email>simeon@pochta.
ru</email><dateRegistration>10.12.2007</dateRegistration>
<dateLastVisit>10.12.2007</dateLastVisit><type>admin</type>
<isBlocked>1</isBlocked></user>";
$dom -> loadXML ($UsersInfoXML);
$dom -> saveXML ($UsersInfoXML);
$dom -> load("UsersInfo.xml");
$dom->save('UsersInfo.xml');

11. Создание узлов DOM. Класс domDocument

Этапы:
Определить, что должно быть добавлено в дерево, и создать
соответствующий новый узел
Указать, куда в дереве должен быть помещен новый узел, и выполнить
добавление узла
Методы объекта domDocument
createElement — создание элемента;
createAttribute — создание атрибута;
createTextNode — создание текстового узла;
createCDATASection — создание секции CDATA;
сreateComment — создание комментария;
createProcessingInstruction—узел инструкции по
указанного целевого объекта и данных.
обработке,
содержащий;
Расположение нового узла в дереве:
appendChild — добавление нового дочернего узла в конец списка потомков;
setAttribute — добавление нового атрибута;
insertBefore — добавление нового дочернего узла перед опорным узлом.

12. Создание узлов DOM с помощью PHP

createProcessingInstruction:
$user = $dom -> createProcessingInstruction
("xml", "version = '1.0' encoding = 'windows-1251'");
сreateElement:
$user = $dom->createElement('user');
сreateAttribute:
$login = $dom -> createAttribute ("login");
$login -> Value = "Ivanov";
setAttribute:
$user-> setAttribute (“id", "Ivanov");
appendChild
$users -> appendChild ($user);
insertBefore
$users -> insertBefore ($id, $user);

13. Создание узлов DOM с помощью PHP

$dom = new DOMDocument();
$DocumentNode = $dom->createElement('users');
$dom->appendChild($DocumentNode);
$elementNode = $dom->createElement('user');
$DocumentNode->appendChild($elementNode);
$attrNode = $dom->createAttribute('id');
$elementNode->setAttributeNode($attrNode);
$textNode = $dom->createTextNode('1');
$attrNode->appendChild($textNode);
$dom->formatOutput = true;
$dom->save('Users.xml');

14. Создание узлов DOM с помощью PHP

$dom = new DomDocument();
$users= $dom->appendChild($dom->createElement('users'));
$user = $users->appendChild($dom->createElement('user'));
$login = $user->appendChild($dom->createElement('login', 'Ivanov!'));
$pass = $user->appendChild($dom->createElement('pass', '12345'));
$name = $user->appendChild($dom->createElement('name'));
$firstname = $name->appendChild($dom->createElement('firstname', 'Иван'));
$secondname = $name->appendChild($dom->createElement('secondname', 'Иванов!'));
$lastname = $name->appendChild($dom->createElement('lastname', 'Иванович'));
$email = $user->appendChild($dom->createElement('email', '[email protected]'));
$dateRegistration= $user->appendChild($dom->createElement('dateRegistration',
'30.11.2016'));
$dateLastVisit= $user->appendChild($dom->createElement('dateLastVisit',
'30.11.2016'));
$type= $user->appendChild($dom->createElement('type', 'user'));
$isBlocked= $user->appendChild($dom->createElement('isBlocked', '0'));
$dom->formatOutput = true;
$UserRegistration = $dom->saveXML();
$dom->save('UserRegistration.xml');

15. Создание узлов DOM с помощью PHP

<form method="post">
<legend>Контактная информация</legend>
<label for="login">login</label>
<input type="text" name="login">
<label for="pass">pass</label>
<input type="pass" name="pass">
<label for="firstname">firstname</label>
<input type="pass" name="firstname">
<label for="lastname">lastname</label>
<input type="lastname" name="lastname">
<label for="email">email</label><input type="email" name="email">
<label for="dateRegistration">dateRegistration</label>
<input type="data" name="dateRegistration">
<input type="submit" value="Отправить">
</form>

16. Создание узлов DOM с помощью PHP

$dom = new DomDocument();
$users= $dom->appendChild($dom->createElement('users'));
$user = $users->appendChild($dom->createElement('user'));
$login = $user->appendChild($dom->createElement('login', ''.$_POST['login'].''));
$pass = $user->appendChild($dom->createElement('pass', ''.$_POST['pass'].''));
$name = $user->appendChild($dom->createElement('name'));
$firstname = $name->appendChild($dom->createElement('firstname',
''.$_POST['firstname'].''));
$secondname = $name->appendChild($dom->createElement('secondname',
''.$_POST['secondname'].''));
$lastname = $name->appendChild($dom->createElement('lastname',
''.$_POST['lastname'].''));
$email = $user->appendChild($dom->createElement('email', ''.$_POST['email'].''));
$dateRegistration= $user->appendChild($dom->createElement('dateRegistration',
'30.11.2016'));
$dateLastVisit= $user->appendChild($dom->createElement('dateLastVisit', '30.11.2016'));
$type= $user->appendChild($dom->createElement('type', 'user'));
$isBlocked= $user->appendChild($dom->createElement('isBlocked', '0'));
$dom->formatOutput = true;
$UserRegistration = $dom->saveXML();
$dom->save('UserRegistration.xml');

17. Корректировка узлов DOM. Класс NodeList

Класс NodeList предоставляет доступ к упорядоченному списку узлов
документа.
Свойства:
length — Количество узлов (от 0 до length–1 включительно).
Методы:
hasChildNodes — возвращение значения true, если узел имеет дочерние
элементы, и false - в противном случае.
appendChild — добавление нового дочернего узла в конец списка потомков.
insertBefore — добавление нового дочернего узла перед опорным узлом.
replaceChiId — замена дочернего узла на новый узел.
removeChiId — удаление узла из списка дочерних узлов.
importNode — импорт узла в текущий документ. (если параметр deep имеет
значение true, копируются и все дочерние узлы).
getElementsByTagName — возвращают список элементов, имеющих искомое
имя узла.
item — возвращение узла с указанным номером. Первый узел имеет номер 0.
Последний — length-1.

18. Корректировка узлов DOM. Класс NodeList

hasChildNodes:
$dom = new DomDocument('1.0');
$dom->load('order.xml');
$node = $dom->getElementsByTagName("order")->item(0);
if ($node->hasChildNodes()) {
echo $node->nodeValue; }
insertBefore:
$dom = new DomDocument;
$dom->load('order.xml');
$node = $dom->getElementsByTagName("order")->item(0);
$id = $node->insertBefore($dom->createElement('id', "Ivanov"),
$dom->getElementsByTagName("goodsList")->item(0) );
$dom->save('order.xml');
item:
$dom = new DomDocument;
$dom->load('order.xml');
echo $dom->getElementsByTagName("order")->item(1)->nodeValue;

19. Удаление узлов DOM

removeChild:
$dom = new DOMDocument;
$dom->load('UserRegistration.xml');
$users = $dom->documentElement;
$user = $users->getElementsByTagName('user')->item(0);
$users2 = $users->removeChild($user);
echo $dom->save(‘UserRegistration.xml');
removeAttribute:
$dom = new DOMDocument;
$dom->load('UserRegistration.xml');
$users = $dom->documentElement;
$user = $users->getElementsByTagName('user')->item(0);
$isBlocked = $user -> getAttributeNode ("isBlocked");
$user -> removeAttributeNode ($isBlocked);
echo $dom->save('UserRegistration.xml');

20. Удаление узлов DOM

echo '<form method="post">
<input type="text" name="removeChild" >
<input type="submit" value="Отправить" name="submit"> </form>';
if ($_POST['submit']) {
$dom = new DOMDocument;
$dom->load('goods.xml');
$xpath_item_XML = new DOMXPath($dom);
foreach ($xpath_item_XML ->query('//item[id="0145"]') as $node){
$usersDel = $dom->documentElement->removeChild($node);
}
echo $dom->save('goods.xml');
}

21. XPath-адресация

PHP-класс DOMXPath:
$xpath = new DOMXPath ($dom);
Свойство:
Document — хранение ссылки на анализируемый документ
Методы:
query —поиск в документе узлов,
условию, заданному в строке Xpath.
удовлетворяющих
evaluate — поиск в документе узлов, удовлетворяющих
условию, заданному в строке Xpath (возвращает текстовый
результат)

22. XPath-адресация

$dom = new DOMDocument();
$dom -> load (“User.xml");
$user='Ivanov';
$number = 0;
$elements = $dom->getElementsByTagName("login");
foreach ($elements as $element) {
if ($element->nodeValue == $user) {
$number++;
}
}
echo $number;

23. XPath-адресация

$dom = new DOMDocument();
$dom -> load (“User.xml");
$dom->preserveWhiteSpace=false;
$xpath = new DOMXPath($dom);
$result = $xpath->query("//user[login='Ivan']");
echo $result->length;
$dom = new DOMDocument();
$dom -> load ("test1.xml");
$dom->preserveWhiteSpace=false;
$xpath = new DOMXPath($dom);
echo $xpath->evaluate("count(//user[login='Ivan'])");
English     Русский Правила