170 likes | 390 Views
XML- технологии Лекция 6. Технология DOM. DOM. DOM — Document Object Model — объектная модель документа, стандартизованная консорциумом W3C DOM — программный интерфейс доступа к структуре и содержимому размеченных документов для создания, ведения и анализа структуры и контента
E N D
XML-технологииЛекция 6 Технология DOM
DOM • DOM — Document Object Model — объектная модель документа, стандартизованная консорциумом W3C • DOM — программный интерфейс доступа к структуре и содержимому размеченных документов для создания, ведения и анализа структуры и контента • DOM — кэш для хранения экземпляра XML-документа
Дерево DOM DOM создает в памяти древовидную версию документа из XML-источника данных
Стандарты DOM Уровень (level) — версия DOM-спецификации от W3C
Способы применения DOM • DOM на сервере • DOM на клиенте
Создание объекта DOM • Основной объект— Document PHP —модуль DOM XML, класс DOMDocument • $dom = newDOMDocument(); • $dom = newDOMDocument ('1.0');
Загрузка документа в DOM Варианты: • Загрузка из файла • Загрузка из строки • Загрузка из потока В PHP-классе DomDocument 2 метода: • Load • LoadXML Примеры • $dom->load ('СтудАтр.xml'); • $textXML = "<СтудАтр> <студент код = 's01' фио = 'Иванов' рейтинг = '20' кафедра = 'АСУ'><сдача оценка = '4' дата = '25-дек'> <предмет код = 'p01' название = 'Теория систем' цикл = 'ОПД' объем = '120' кафедра = 'АСУ'/> </сдача></студент></СтудАтр>«; $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 ('http:asu', 'фио'); -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 = newDOMXPath ($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 = newXsltProcessor(); • Загрузка таблицы стилей— метод Load: • $xsl = newDomDocument; • $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 ();