Similar presentations:
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'])");