PHP DOM Builder API 2.0
- Core\Element\Double
- Core\Element\DoubleBlock
- Core\Element\DoubleInline
- Core\Element\Field
- Core\Element\Root
- Core\Element\Single
- Element\A
- Element\Abbr
- Element\Address
- Element\Area
- Element\Article
- Element\Aside
- Element\Audio
- Element\B
- Element\Base
- Element\Bdi
- Element\Bdo
- Element\Blockquote
- Element\Body
- Element\Br
- Element\Button
- Element\Canvas
- Element\Caption
- Element\Cite
- Element\Code
- Element\Col
- Element\Colgroup
- Element\Command
- Element\Datalist
- Element\Dd
- Element\Del
- Element\Details
- Element\Dfn
- Element\Div
- Element\Dl
- Element\Dt
- Element\Em
- Element\Embed
- Element\Fieldset
- Element\Figcaption
- Element\Figure
- Element\Footer
- Element\Form
- Element\H1
- Element\H2
- Element\H3
- Element\H4
- Element\H5
- Element\H6
- Element\Head
- Element\Header
- Element\Hgroup
- Element\Hr
- Element\Html
- Element\I
- Element\Iframe
- Element\Img
- Element\Input
- Element\Ins
- Element\Kbd
- Element\Keygen
- Element\Label
- Element\Legend
- Element\Li
- Element\Link
- Element\Map
- Element\Mark
- Element\Menu
- Element\Meta
- Element\Meter
- Element\Nav
- Element\Noscript
- Element\Object
- Element\Ol
- Element\Optgroup
- Element\Option
- Element\Output
- Element\P
- Element\Param
- Element\Pre
- Element\Progress
- Element\Q
- Element\Rp
- Element\Rt
- Element\Ruby
- Element\S
- Element\Samp
- Element\Script
- Element\Section
- Element\Select
- Element\Small
- Element\Source
- Element\Span
- Element\Strong
- Element\Style
- Element\Sub
- Element\Summary
- Element\Sup
- Element\Table
- Element\Tbody
- Element\Td
- Element\Textarea
- Element\Tfoot
- Element\Th
- Element\Thead
- Element\Time
- Element\Title
- Element\Tr
- Element\Track
- Element\U
- Element\Ul
- Element\Variable
- Element\Video
- Element\Wbr
Выпущен релиз EOOS Automotive R23-03 в версия v0.11.0
Третий официальный релиз EOOS Automotive, который был тщательно проработан и квалифицирован для POSIX и WIN32 совместимых операционных систем с учетом интерфейсов разработанных для EOOS RT – операционной системы реального времени.
Выборка элементов DOM
Для выборки узлов документа используются следующие методы:
- getElementsById;
- getElementsByTagName;
- getElementsByClassName;
- getElementsByAttr;
- getParentsById;
- getParentsByTagName;
- getParentsByClassName;
- getParentsByAttr;
По каким критериям они производят поиск понятно из их названия. Методы с префиксом getElements ищут в дочерних узлах, а getParents - в родительских.
Для примера возьмём следующий документ:
<?php
use DomBuilder\Element as Element;
// Создаём корневой узел документа
$document = Element::create();
// Создаём документ
$document->insert('html')
->insert('head')
->insert('title')->html('PHP DOM Builder test page')
->after('meta')
->attr('http-equiv', 'Content-Type')
->attr('content', 'text/html; charset=utf-8')
->parent()
->after('body')
->insert('div')->attr('id', 'content')
->insert('h1')->html('Заголовок')
->after('div')->addClass('article')->attr('id', 'id_article')
->insert('h2')->html('Статья 1')
->after('p')
->insert('a')->href('google.com')->html('Текст 1')
->parent()
->parent()
->after('div')->addClass('article')->addClass('print')
->insert('h2')
->insert('a')->href('/article/')->html('Статья 2')
->parent()
->after('p')
->insert('a')->href('baigudin.software')->html('Текст 2')
->parent()
->parent()
->parent()
->after('div')->attr('id', 'footer')
->insert('p')->html('© copyright 2016');
?>
Если вам всё еще тяжело представить HTML, получаемый после вывода, то вот он:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<title>PHP DOM Builder test page</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
</head>
<body>
<div id="content">
<h1>
Заголовок
</h1>
<div class="article" id="id_article">
<h2>
Статья 1
</h2>
<p>
<a href="google.com">Текст 1</a>
</p>
</div>
<div class="article print">
<h2>
<a href="/article/">Статья 2</a>
</h2>
<p>
<a href="baigudin.software">Текст 2</a>
</p>
</div>
</div>
<div id="footer">
<p>
© copyright 2016
</p>
</div>
</body>
</html>
Теперь попробуем что-нибудь найти и изменить:
<?php
// Изменение заголовка H2 у статьи 1
$h2 = $document->getElementsById('id_article')
->child()->html('Новая статья 1');
// Удаление атрибутов ID у всех родительских DIV-ов
$h2->getParentsByTagName('div')->removeAttr('id');
// Поиск узлов со значением атрибута ID равного "content"
$len = $document->getElementsByAttr('id', 'content')->length();
if($len == 0)
{
// Поиск и удаление узлов со значением класса "print"
$document->getElementsByClassName('print')->remove();
}
// Выводим документ
echo Element::getDocument($document);
?>
Для начала мы изменим заголовок H2 у статьи 1. Искать его будем по его идентификатору «id_article» с помощью метода getElementsById. Все методы выборки узлов возвращают ссылку на класс ElementList. Для получения класса самого узла мы вызываем метод get с параметром ноль, возвращающий первый узел списка. В результате мы получим тег DIV с идентификатором «id_article». Возьмём у него первый дочерний узел, что и будет искомый H2, и изменим его заголовок.
Здесь стоит отметить, что HTMLдокумент будет валиден, если идентификаторы его тегов уникальны. Но от всего не убережёшься, поэтому мы и ввели метод getElementsById. Если вы уверены в вашем документе, то можете использовать метод getElementById. Она возвращает класс ElementNode, если найдет ровно один узел, или false.
Теперь, относительно найденного тега H2, найдём все родительские теги DIV и удалим у них атрибут ID. Несложно понять, что в нашем документе не будет идентификаторов «id_article» и «content». Проверим это. Найдем в документе тег с идентификатором «content» и, если его не будет, удалим тег с классом «print». Результатбудетследующий:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<title>PHP DOM Builder test page</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
</head>
<body>
<div>
<h1>
Заголовок
</h1>
<div class="article">
<h2>
Новая статья 1
</h2>
<p>
<a href="google.com">Текст 2</a>
</p>
</div>
</div>
<div id="footer">
<p>
© copyright 2016
</p>
</div>
</body>
</html>
Понятно, что данный пример практического смысла не имеет, но им мы хотим показать те возможности, которые у вас есть. Далее мы рассмотрим поиск узлов по нескольким критерия.