Лекция 6 - кафедры АСУ

advertisement
XML-технологии
Лекция 6
Технология DOM
DOM

DOM — Document Object Model — объектная модель
документа, стандартизованная консорциумом W3C

DOM — программный интерфейс доступа к структуре и
содержимому размеченных документов для создания,
ведения и анализа структуры и контента

DOM — кэш для хранения экземпляра XML-документа
Дерево DOM
DOM создает в памяти древовидную версию документа
из XML-источника данных
Стандарты DOM
Уровень (level) — версия DOM-спецификации от W3C
Типы узлов DOM
Наименование
Document
DocumentFragment
Element
Attr
Text
Comment
CDATASection
ProcessingInstruction
Entity
EntityReference
DocumentType
Notation
Описание
Корень древовидной структуры DOM
Набор элементов, относящийся к дереву
DOM или подготовленный для добавления к
его структуре
Элемент документа
Атрибут элемента документа
Текстовое содержимое элементов
и значения атрибутов
Комментарий в документе
Раздел CDATA
Инструкция по обработке
Сущность, объявленная в разделе DTD
Ссылка на сущность из раздела DTD
Заголовок DTD-схемы документа
Нотации, объявленные в разделе DTD
Типы узлов DOM. Пример
Document
Element
Студенты-атр
DocumentFragment
Element
студент
Attr
код
Element
сдача
оценка
Attr
5
дата
рейтинг
Attr
объем
Element
сдача
Element
назв
объем
код
Attr
Attr
Attr
Text
оценка
Text
Attr
дата
p03
Text
Attr
120
Attr
p04
Attr
Attr
Text
Text
Базы данных
140
Text
объем
25-янв
Text
Text
Element
сдача
11-янв
Element
код
назв
объем
код
Attr
Attr
Attr
Attr
10
Text
Text
Text
Attr
p01
Text
Text
Attr
120
дата
Attr
Петров
Теория систем
оценка
предмет
Text
s02
Text
Attr
назв
3
рейтинг
Element
Text
Attr
фио
предмет
Text
дата
Attr
20
Element
сдача
Криптография
оценка
предмет
Attr
Text
Attr
код
4
21-янв
Element
назв
Иванов
Element
студент
Text
предмет
код
Attr
фио
Text
s01
p02
Text
Attr
Attr
Text
Text
Матлогика
170
Text
5
15-янв
Text
Text
Способы применения DOM
DOM на сервере

URL с параметрами запроса
Клиент
Веб-сервер
Серверные
сценарии
DOM
Браузер
HTML-страницы

Экземпляры
DOM-объектов
ХML-данные
DOM на клиенте
Клиент
URL с параметрами запроса
Серверные
сценарии
Браузер
HTML-страницы
DOM
Экземпляр
DOM-объекта
Веб-сервер
Клиентские сценарии
ХML-данные
Создание объекта DOM

Основной объект — Document
PHP — модуль DOM XML, класс DOMDocument

$dom = new DOMDocument ();

$dom = new DOMDocument ('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 — предок контекстного узла:


firstChild — первый дочерний узел:



$node -> previousSibling -> tagName;
nextSibling — узел, следующий за контекстным в иерархии
предка:


$node -> lastChild -> tagName;
previousSibling — узел, предыдущий контекстному
в иерархии предка:


$node -> firstChild -> tagName;
lastChild — последний дочерний узел:


$node -> parentNode -> tagName;
$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:


Загрузка таблицы стилей— метод Load:



$xsl = new DomDocument;
$xsl -> load ("stylesheet.xsl");
Привязка таблицы стилей — метод importStylesheet:


$xp = new XsltProcessor();
$xp->importStylesheet($xsl);
Преобразование:

transformToXml:


transformToUrl:


echo $xp -> transformToXml ($xml);
$xp -> transformToURI ($xml, 'file:///result.html');
transformToDoc:


$result = $xp -> transformToDoc ($xml);
echo $result -> saveXML ();
Download