XML- технологии Лекция 6 Технология DOM
DOM DOM Document Object Model объектная модель документа, стандартизованная консорциумом W3C DOM программный интерфейс доступа к структуре и содержимому размеченных документов для создания, ведения и анализа структуры и контента DOM кэш для хранения экземпляра XML-документа
Дерево DOM DOM создает в памяти древовидную версию документа из XML- источника данных
Стандарты DOM Уровень (level) версия DOM-спецификации от W3C
Типы узлов DOM НаименованиеОписание DocumentКорень древовидной структуры DOM DocumentFragmentНабор элементов, относящийся к дереву DOM или подготовленный для добавления к его структуре ElementЭлемент документа AttrАтрибут элемента документа TextТекстовое содержимое элементов и значения атрибутов CommentКомментарий в документе CDATASectionРаздел CDATA ProcessingInstructionИнструкция по обработке EntityСущность, объявленная в разделе DTD EntityReferenceСсылка на сущность из раздела DTD DocumentTypeЗаголовок DTD-схемы документа NotationНотации, объявленные в разделе DTD
Типы узлов DOM. Пример
Способы применения DOM DOM на сервере DOM на клиенте
Создание объекта DOM Основной объект Document PHP модуль DOM XML, класс DOMDocument $dom = new DOMDocument (); $dom = new DOMDocument ('1.0');
Загрузка документа в DOM Варианты: Загрузка из файла Загрузка из строки Загрузка из потока В PHP-классе DomDocument 2 метода: Load LoadXML Примеры $dom->load ('СтудАтр.xml'); $textXML = " «; $dom -> loadXML ($textXML);
Создание узлов DOM Этапы: Определить, что должно быть добавлено в дерево, и создать соответствующий новый узел Указать, куда в дереве должен быть помещен новый узел, и выполнить добавление узла Методы объекта Document createElement создание элемента createAttribute создание атрибута createTextNode создание текстового узла createCDATASection создание секции CDATA сreateComment создание комментария Расположение нового узла в дереве: Привязка к существующему узлу дерева Привязка к отношению иерархии между узлами
Создание узлов DOM с помощью PHP createProcessingInstruction: $pi = $dom -> createProcessingInstruction ("xml", "version = '1.0' encoding = 'windows-1251'"); сreateElement: $student = $dom -> createElement ("студент"); сreateAttribute: $fio = $dom -> createAttribute ("фио"); $fio -> Value = "Иванов"; setAttribute: $student-> setAttribute ("фио", "Иванов"); appendChild $student -> appendChild ($kod); insertBefore $student -> insertBefore ($kaf, $reit);
Удаление узлов DOM removeChild: $xml -> removeChild ($xml -> documentElement); removeAttribute $stud = $xml -> getElementsByTagName ("студент") -> item (0); $stud -> removeAttribute ('фио'); removeAttributeNode $stud = $xml -> getElementsByTagName ("студент") -> item (0); $fio = $stud -> getAttributeNode ("фио"); $stud -> removeAttributeNode ($fio); removeAttributeNS -1- $stud = $xml -> getElementsByTagName ("студент") -> item (0); $stud -> removeAttributeNS (' 'фио'); -2- $stud = $xml -> getElementsByTagName ("студент") -> item (0); $sdacha = $stud -> getElementsByTagName ("сдача") -> item (0); $stud -> removeChild ($sdacha);
Редактирование узлов DOM cloneNode копирование узла: $clone = $student -> cloneNode (true); replaceChild замена узла дерева в DOM: $dom -> replaceChild ($clone, dom -> DocumentElement); removeChild удаление узла дерева в DOM: $student -> removeChild (); removeAttribute и removeAttributeNode удаление атрибутов
Обход узлов дерева DOM nodeType определение типа узла: Node -> nodeType tagName имя элемента, name имя атрибута removeChild удаление узла дерева в DOM: $student -> removeChild (); removeAttribute и removeAttributeNode удаление атрибутов
Обход узлов дерева DOM parentNode предок контекстного узла: $node -> parentNode -> tagName; firstChild первый дочерний узел: $node -> firstChild -> tagName; lastChild последний дочерний узел: $node -> lastChild -> tagName; previousSibling узел, предыдущий контекстному в иерархии предка: $node -> previousSibling -> tagName; nextSibling узел, следующий за контекстным в иерархии предка: $node -> nextSibling -> tagName hasAttributes проверка наличия атрибутов hasChildNodes проверка наличия дочерних узлов
XPath-адресация PHP-класс DOMXPath: $xpath = new DOMXPath ($dom); Запросы : query: $query1 = "// студент фио = ' Иванов ']/ сдача [ предмет название = ' Базы данных оценка "; echo $xpath -> query ($query1) -> item (0) -> value; evaluate: $query2 = "count (// студент фио = ' Иванов ']/ сдача )"; echo $xpath -> evaluate ($query2, $dom); getElementsByTagName: $result = $dom -> getElementsByTagName (" студент ");
XSL-трансформация с помощью DOM Базовый класс в PHP XsltProcessor: $xp = new XsltProcessor(); Загрузка таблицы стилей метод Load: $xsl = new DomDocument; $xsl -> load ("stylesheet.xsl"); Привязка таблицы стилей метод importStylesheet: $xp->importStylesheet($xsl); Преобразование : transformToXml: echo $xp -> transformToXml ($xml); transformToUrl: $xp -> transformToURI ($xml, 'file:///result.html'); transformToDoc: $result = $xp -> transformToDoc ($xml); echo $result -> saveXML ();